1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
void HeadAdjust(int *array, int k, int heapSize) { int temp = array[k]; for (int i = 2 * k + 1; i < heapSize; i = 2 * i + 1) { if (i + 1 < heapSize && array[i] < array[i + 1]) ++i;
if (temp >= array[i]) break;
array[k] = array[i]; k = i; } array[k] = temp; }
void BuildMaxHeap(int *array, int n) { for (int i = n / 2 - 1; i >= 0; --i) HeadAdjust(array, i, n); }
void HeapSort(int *array, int n) { BuildMaxHeap(array, n);
for (int i = n - 1; i > 0; --i) { std::swap(array[0], array[i]); HeadAdjust(array, 0, i); } }
|