// 大顶堆调整 voidadjustHeap(int a[], int p, int len) { int curParent = a[p]; // 当前父亲结点 int child = 2 * p + 1; // 找到当前结点左孩子,并让child指向左孩子 while (child < len) { if (child + 1 < len && a[child] < a[child + 1]) // 如果右孩子结点值大于左孩子 child++; // child指向右孩子 if (curParent < a[child]) // 孩子结点值大于父亲结点 { a[p] = a[child]; p = child; child = 2 * p + 1; } else break; } a[p] = curParent; }
voidheapSort(int a[], int len) { for (int i = len / 2 - 1; i >= 0; i--) // 建立初始堆 adjustHeap(a, i, len); for (int i = len - 1; i >= 0; i--) { int temp = a[0]; a[0] = a[i]; a[i] = temp;