onst void*, const void*)) { for (int i = n / 2 - 1; i >= 0; i--) makeHeap(x, i, n, sz, cmp); } void heapSort(void* x, int n, size_t sz, int(*cmp)(const void*, const void*)) { buildHeap(x, n, sz, cmp); char* y = (char*)x; for (int i = n - 1; i >= 1; i--){ swap(y, y + i*sz, sz); makeHeap(x, 0, --n, sz, cmp); } } void p(int* x,int n){ for (int k = 0; k < n; k++){ printf("%d ", x[k]); } printf("\n"); } int less(const void* a, const void* b){ return *((int*)a) < *((int*)b); } int greater(const void* a, const void* b){ return *((int*)a) > *((int*)b); } int main(){ int x[] = { 2, 3, 4, 6, 8, 2, 9, 0 }; // 降序全排列 heapSort(x, 8, sizeof(int), less); p(x, 8); // 升序全排列 heapSort(x, 8, sizeof(int), greater); p(x, 8); // 最大的4个元素,在数组末尾 heapSort(x, 4, sizeof(int), less); p(x, 8); }
|