输入:数组a
输出:对数组a进行堆排序(升序)
注意:根节点的下标为0
#include <iostream>
using namespace std;
void AdjustHeap(int a[], int i, int heapsize)
{
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int max = i;
if (lchild <= heapsize - 1 && a[lchild] > a[max]) {
max = lchild;
}
if (rchild <= heapsize - 1 && a[rchild] > a[max]) {
max = rchild;
}
if (max != i) {
swap(a[i], a[max]);
AdjustHeap(a, max, heapsize);
}
}
void BuildHeap(int a[], int size)
{
for (int i = size / 2 - 1; i >= 0; i--) {
AdjustHeap(a, i, size);
}
}
void HeapSort(int a[], int size)
{
BuildHeap(a, size);
for (int i = size - 1; i >= 1; i--) {
swap(a[0], a[i]);
AdjustHeap(a, 0, i);
}
}
int main()
{
int size = 9;
int a[] = { 3, 1, 5, 7, 11, 9, 10 ,6, 4};
HeapSort(a, size);
for (int i = 0; i<size; i++) {
cout << a[i] << " ";
}
system("pause");
return 0;
}