#include #include #include int compare = 0, k, n = 5000, groupsize, extra, opt = 0; int * quantilePos; void QuickSort(int a[], int left, int right) { int i=0, j, tmp, pivot; if (++compare && right <= left) return; /* This is Optimization RST */ /* It optimizes for large groupsize, but adds comparisons * as currently counted) for small groupsize. */ if (opt) { if (compare++ && extra <= 1) i = left/(groupsize + 1); else { int myleft = left, myextra = extra, one = 1; do { i++; myleft = myleft - groupsize -1 - one; myextra--; } while (compare++ && extra>=1 && compare++ && myleft > 0); if (compare++ && myleft > 0) i += myleft/(groupsize + 1); } if (++compare && rightpivot); if (++compare && i>=j) break; tmp = a[i]; a[i] = a[j]; a[j] = tmp; } a[right] = a[i]; a[i] = pivot; QuickSort(a, left, i-1); QuickSort(a, i+1, right); } void algorithm(int k) { int i=0, j, element, print = 0; quantilePos = calloc(k-1, sizeof(int)); element = 0; groupsize = (n-k+1)/k; if (++compare && groupsize>=4) opt = 1; printf("Groupsize is %d.\n", groupsize); extra = n - groupsize * k - k + 1; j=0; while (++compare && extra>1) { element = element + groupsize + 2; extra--; j++; quantilePos[i++] = element; } for (;++compare && j