堆是一种优先级队列的数据结构,以完全二叉树的形式展现。 以下是示例代码 #include <iostream> using namespace std; void initMaxHeap(int a [], int size) { for (int i = size/2; i > 0; --i) { int m = a[i-1]; int c = 2*i; while (c <= size) { if (c < size && a[c-1] < a[c]) ++c; if (m >= a[c-1]) break; a[c/2-1] = a[c-1]; c *= 2; } a[c/2-1] = m; } } void MaxHeapSort(int a [], int size) { for (int i = 0; i < size; ++i) { int max = a[0]; int cursize = size-i; int m = a[cursize-1]; a[cursize-1] = max; --cursize; int c = 2; while (c <= cursize) { if (c < cursize && a[c-1] < a[c]) ++c; if (m >= a[c-1]) break; a[c/2-1] = a[c-1]; c *= 2; } a[c/2-1] = m; } } int main() { int a[] = { 1, 2, 3, 7, 0, 10, 5, 9, 6, 8, 4 }; initMaxHeap(a, 11); MaxHeapSort(a, 11); return 0; }