OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sort.c File Reference
#include <space.h>

Go to the source code of this file.

Macros

#define THRES   10

Functions

void insertUpInts (PORD_INT n, PORD_INT *array)
void insertUpIntsWithStaticIntKeys (PORD_INT n, PORD_INT *array, PORD_INT *key)
void insertDownIntsWithStaticFloatKeys (PORD_INT n, PORD_INT *array, FLOAT *key)
void insertUpFloatsWithIntKeys (PORD_INT n, FLOAT *array, PORD_INT *key)
void qsortUpInts (PORD_INT n, PORD_INT *array, PORD_INT *stack)
void qsortUpFloatsWithIntKeys (PORD_INT n, FLOAT *array, PORD_INT *key, PORD_INT *stack)
void distributionCounting (PORD_INT n, PORD_INT *node, PORD_INT *key)

Macro Definition Documentation

◆ THRES

#define THRES   10

Definition at line 14 of file sort.c.

Function Documentation

◆ distributionCounting()

void distributionCounting ( PORD_INT n,
PORD_INT * node,
PORD_INT * key )

Definition at line 186 of file sort.c.

187{ register PORD_INT i;
188 PORD_INT *tmp, *count, minkey, maxkey, l, u, vk;
189
190 /* determine maximal and minimal key */
191 minkey = MAX_INT;
192 maxkey = 0;
193 for (i = 0; i < n; i++)
194 { u = node[i];
195 maxkey = max(key[u], maxkey);
196 minkey = min(key[u], minkey);
197 }
198 l = maxkey-minkey;
199 /* printf("minkey %d, maxkey %d, range %d\n", minkey, maxkey, l); */
200 mymalloc(count, (l+1), PORD_INT);
201 mymalloc(tmp, n, PORD_INT);
202 for (i = 0; i <= l; i++)
203 count[i] = 0;
204
205 /* scale down all key-values */
206 for (i = 0; i < n; i++)
207 { u = node[i];
208 vk = key[u]-minkey;
209 key[u] = vk;
210 count[vk]++;
211 }
212
213 /* now do the sorting */
214 for (i = 1; i <= l; i++)
215 count[i] += count[i-1];
216 for (i = n-1; i >= 0; i--)
217 { u = node[i];
218 tmp[--count[key[u]]] = u;
219 }
220 for (i = 0; i < n; i++)
221 node[i] = tmp[i];
222/*
223 for (i = 0; i < n; i++)
224 { u = node[i];
225 printf(" node %d, key %d\n", u, key[u]);
226 }
227*/
228 free(count);
229 free(tmp);
230}
#define MAX_INT
Definition const.h:56
#define min(a, b)
Definition macros.h:20
#define mymalloc(ptr, nr, type)
Definition macros.h:23
#define max(a, b)
Definition macros.h:21
n
#define PORD_INT
Definition types.h:20

◆ insertDownIntsWithStaticFloatKeys()

void insertDownIntsWithStaticFloatKeys ( PORD_INT n,
PORD_INT * array,
FLOAT * key )

Definition at line 58 of file sort.c.

59{ PORD_INT i, j, e;
60 FLOAT ke;
61
62 for (i = 1; i < n; i++)
63 { e = array[i]; ke = key[e]; j = i;
64 while ((j > 0) && (key[array[j-1]] < ke))
65 { array[j] = array[j-1];
66 j--;
67 }
68 array[j] = e;
69 }
70}
double FLOAT
Definition types.h:23

◆ insertUpFloatsWithIntKeys()

void insertUpFloatsWithIntKeys ( PORD_INT n,
FLOAT * array,
PORD_INT * key )

Definition at line 77 of file sort.c.

78{ PORD_INT i, j, ke;
79 FLOAT e;
80
81 for (i = 1; i < n; i++)
82 { e = array[i]; ke = key[i]; j = i;
83 while ((j > 0) && (key[j-1] > ke))
84 { array[j] = array[j-1];
85 key[j] = key[j-1];
86 j--;
87 }
88 array[j] = e;
89 key[j] = ke;
90 }
91}

◆ insertUpInts()

void insertUpInts ( PORD_INT n,
PORD_INT * array )

Definition at line 21 of file sort.c.

22{ PORD_INT i, j, v;
23
24 for (i = 1; i < n; i++)
25 { v = array[i]; j = i;
26 while ((j > 0) && (array[j-1] > v))
27 { array[j] = array[j-1];
28 j--;
29 }
30 array[j] = v;
31 }
32}

◆ insertUpIntsWithStaticIntKeys()

void insertUpIntsWithStaticIntKeys ( PORD_INT n,
PORD_INT * array,
PORD_INT * key )

Definition at line 39 of file sort.c.

40{ PORD_INT i, j, ke;
41 PORD_INT e;
42
43 for (i = 1; i < n; i++)
44 { e = array[i]; ke = key[e]; j = i;
45 while ((j > 0) && (key[array[j-1]] > ke))
46 { array[j] = array[j-1];
47 j--;
48 }
49 array[j] = e;
50 }
51}

◆ qsortUpFloatsWithIntKeys()

void qsortUpFloatsWithIntKeys ( PORD_INT n,
FLOAT * array,
PORD_INT * key,
PORD_INT * stack )

Definition at line 140 of file sort.c.

141{ register PORD_INT i, j;
142 PORD_INT t, l, m, r, p;
143 FLOAT e;
144
145 l = 0; r = n-1; p = 2;
146 while (p > 0)
147 if ((r-l) > THRES)
148 { m = l + ((r-l) >> 1);
149 if (key[l] > key[r])
150 { swap(array[l], array[r], e); swap(key[l], key[r], t); }
151 if (key[l] > key[m])
152 { swap(array[l], array[m], e); swap(key[l], key[m], t); }
153 if (key[r] > key[m])
154 { swap(array[m], array[r], e); swap(key[m], key[r], t); }
155 m = key[r]; i = l-1; j = r;
156 for (;;)
157 { while (key[++i] < m);
158 while (key[--j] > m);
159 if (i >= j) break;
160 swap(array[i], array[j], e); swap(key[i], key[j], t);
161 }
162 swap(array[i], array[r], e); swap(key[i], key[r], t);
163 if ((i-l) > (r-i))
164 { stack[p++] = l;
165 stack[p++] = i-1;
166 l = i+1;
167 }
168 else
169 { stack[p++] = i+1;
170 stack[p++] = r;
171 r = i-1;
172 }
173 }
174 else
175 { r = stack[--p];
176 l = stack[--p];
177 }
178 if (THRES > 0) insertUpFloatsWithIntKeys(n, array, key);
179}
#define swap(a, b, tmp)
Definition macros.h:40
void insertUpFloatsWithIntKeys(PORD_INT n, FLOAT *array, PORD_INT *key)
Definition sort.c:77
#define THRES
Definition sort.c:14

◆ qsortUpInts()

void qsortUpInts ( PORD_INT n,
PORD_INT * array,
PORD_INT * stack )

Definition at line 98 of file sort.c.

99{ register PORD_INT i, j;
100 PORD_INT t, l, m, r, p;
101
102 l = 0; r = n-1; p = 2;
103 while (p > 0)
104 if ((r-l) > THRES)
105 { m = l + ((r-l) >> 1);
106 if (array[l] > array[r]) swap(array[l], array[r], t);
107 if (array[l] > array[m]) swap(array[l], array[m], t);
108 if (array[r] > array[m]) swap(array[m], array[r], t);
109 m = array[r]; i = l-1; j = r;
110 for (;;)
111 { while (array[++i] < m);
112 while (array[--j] > m);
113 if (i >= j) break;
114 swap(array[i], array[j], t);
115 }
116 swap(array[i], array[r], t);
117 if ((i-l) > (r-i))
118 { stack[p++] = l;
119 stack[p++] = i-1;
120 l = i+1;
121 }
122 else
123 { stack[p++] = i+1;
124 stack[p++] = r;
125 r = i-1;
126 }
127 }
128 else
129 { r = stack[--p];
130 l = stack[--p];
131 }
132 if (THRES > 0) insertUpInts(n, array);
133}
void insertUpInts(PORD_INT n, PORD_INT *array)
Definition sort.c:21