堆排序
来源:互联网 发布:slax linux中文版 编辑:程序博客网 时间:2024/06/05 19:49
void dealHeap(int *p, int index, int count){ if (2*index + 2 > count) return ; int left = 2*index + 1; int right = 2*index + 2; int m = p[left] > p[right] ? left : right; if (p[m] > p[index]) { swap(&p[m], &p[index]); dealHeap(p, m, count); }}void createHeap(int *p, int count){ for (int i = count; i >= 0; i--) { dealHeap(p, i, count); }}void heapSort(int *p, int count){ createHeap(p, count); for (int i = count; i >= 0; i--) { dealHeap(p, 0, i); if (i != 1) swap(&p[0], &p[i]); }}