MCPcopy Create free account
hub / github.com/csound/csound / smoothsort

Function smoothsort

Engine/sort.c:179–232  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179static void smoothsort(SRTBLK *A[], const int N)
180{
181 int temp;
182 int data[] = {/*q*/ 1, /*r*/ 0, /*p*/ 1, /*b*/ 1, /*c*/ 1, 0,0,0};
183
184 /* building tree */
185 while (q < N) {
186 r1 = r;
187 if ((p & 7)==3) {
188 b1 = b; c1 = c; sift(A, data);
189 p = (p+1) >> 2;
190 UP(b,c) UP(b,c)
191 }
192 else if ((p & 3)==1) {
193 if (q + c < N) {
194 b1 = b; c1 = c; sift(A, data);
195 }
196 else trinkle(A, data);
197 DOWN(b,c);
198 p <<= 1;
199 while (b > 1) {
200 DOWN(b,c)
201 p <<= 1;
202 }
203 p++;
204 }
205 q++; r++;
206 }
207 r1 = r; trinkle(A, data);
208
209 /* building sorted array */
210 while (q > 1) {
211 q--;
212 if (b==1) {
213 r--; p--;
214 while ((p & 1)==0) {
215 p >>= 1;
216 UP(b,c)
217 }
218 }
219 else
220 if (b >= 3) {
221 p--; r = r-b+c;
222 if (p > 0) semitrinkle(A, data);
223 DOWN(b,c)
224 p = (p << 1) + 1;
225 r = r+c; semitrinkle(A, data);
226 DOWN(b,c)
227 p = (p << 1) + 1;
228 }
229 /* element q processed */
230 }
231 /* element 0 processed */
232}
233
234
235void sort(CSOUND *csound)

Callers 1

sortFunction · 0.85

Calls 3

siftFunction · 0.85
trinkleFunction · 0.85
semitrinkleFunction · 0.85

Tested by

no test coverage detected