标签:int qsort sort size_t EAP c语言 col 语言 swa
堆排序的实现如下,用法与qsort相似:
static void swap(void* a, void* b, int size) { char t; do { t = *(char*)a; *(char*)a++ = *(char*)b; *(char*)b++ = t; } while (--size > 0); } /* custom function cmp */ void sort(void* base, size_t num, size_t size, int (*cmp)(const void*, const void*)) { /* pre-scale counters for performance */ int i = (num / 2 - 1) * size, n = num * size, c, r; /* heapify */ for (; i >= 0; i -= size) { for (r = i; r * 2 + size < n; r = c) { c = r * 2 + size; if (c < n - size && cmp(base + c, base + c + size) < 0) c += size; if (cmp(base + r, base + c) >= 0) break; swap(base + r, base + c, size); } } /* sort */ for (i = n - size; i > 0; i -= size) { swap(base, base + i, size); for (r = 0; r * 2 + size < i; r = c) { c = r * 2 + size; if (c < i - size && cmp(base + c, base + c + size) < 0) c += size; if (cmp(base + r, base + c) >= 0) break; swap(base + r, base + c, size); } } }
标签:int qsort sort size_t EAP c语言 col 语言 swa
原文地址:https://www.cnblogs.com/tongyishu/p/12228256.html