- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
void sort(void *a, int n, int size, int (*cmp)(const void*, const void*)) {
int j;
if (n <= 1) return;
if (n == 2) {
if (cmp(a + size*1, a)) {
for (j = 0; j < size; j++) {
SWAP(*(char*)(a + j + size), *(char*)(a + j));
}
}
return;
}
int d, p = 0, i;
for (i = 1; i < n; i++) {
if (cmp(a + size*i, a + size*(i-1))) { d = i; goto sorting; }
}
return;
sorting:
static char buf[128];
memcpy(buf, a + size*d, size);
for (i = 0; i < n; i++) {
if (!cmp(buf, a + i*size)) {
for (j = 0; j < size; j++) {
SWAP(*(char*)(a + j + i*size), *(char*)(a + j + p*size));
}
p++;
}
}
sort(a, p, size, cmp);
sort(a+p*size, n-p, size, cmp);
}
Попросили по программированию в универе написать сортировку на С. Написал.