8 int (*compfunc)(
const void *data1,
const void *data2,
void *userarg),
17 size_t A102549[9] = {1, 4, 10, 23, 57, 132, 301, 701, 1750};
20 void *tmp = alloca(elemsize);
22 for (Aidx = 8; Aidx >= 0; Aidx--) {
24 if (gap > (elemcount / 2)) {
27 for (i = 0; i < gap; i++) {
28 for (j = i; j < elemcount; j += gap) {
29 memcpy(tmp, (
void *)((
size_t)data + elemsize * j), elemsize);
31 for (k = j; k >= gap; k -= gap) {
32 void *cmp = (
void *)((
size_t)data + elemsize * (k - gap));
33 int cmpres = compfunc(cmp, tmp, userarg);
35 memcpy((
void *)((
size_t)data + elemsize * k),
42 memcpy((
void *)((
size_t)data + elemsize * k), tmp, elemsize);
static void mg_sort(void *data, size_t elemcount, size_t elemsize, int(*compfunc)(const void *data1, const void *data2, void *userarg), void *userarg)