/*
堆排序算法
*/
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
void heapAdjust(int a[], int k, int len) {
a[0] = a[k];
for (int i = 2 * k; i <= len; i *= 2) {
if (i < len && a[i] < a[i + 1]) i++;
if (a[k] >= a[i]) {
break;
}
else {
a[k] = a[i];
k = i;
}
a[k] = a[0];
}
}
void heapsort(int a[], int len) {
for (int i = len / 2; i > 0; i--) {//建立大顶堆
heapAdjust(a, i, len);
}
for (int i = len; i > 1; i--) {
swap(a[1], a[i]);
heapAdjust(a, 1, i - 1);
}
}
int main() {
int a[7] = { 0,12,2,4,54,5,9};
heapsort(a, 6);
for (int i = 1; i <= 6; i++) {
cout << a[i] << endl;
}
return 0;
}