由最大堆的思想产生在数组原地操作实现的最大堆排序
#include <iostream>
#include <algorithm>
#include "SorttestHelper.h"
using namespace std;
template<typename T>
void __shiftDown(T arr[], int n, int k) {
while (2 * k + 1 < n) {
int j = 2 * k + 1;
if (j + 1 < n && arr[j + 1] > arr[j])
j++;
if (arr[k] > arr[j])
break;
swap(arr[k], arr[j]);
k = j;
}
}
template<typename T>
void heapSort(T arr[], int n) {
// heapify
for (int i = (n - 1) / 2; i >= 0; i--)
__shiftDown(arr, n, i);
for (int i = n - 1; i > 0; i--) {
swap(arr[0], arr[i]);
__shiftDown(arr, i, 0);
}
}
int main()
{
int n = 1000000;
int *arr = SorttestHelper::generaateRandomArray(n, 0, n);
//int *arr = SorttestHelper::generateNearlyOrderedArray(n, 10);
int *arr2 = SorttestHelper::copyIntArray(arr, n);
int *arr3 = SorttestHelper::copyIntArray(arr, n);
//SorttestHelper::testSort("Selection Sort", selectionSort, arr, n);
S