| 177 | } |
| 178 | |
| 179 | static 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 | |
| 235 | void sort(CSOUND *csound) |
no test coverage detected