#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> heap{ 3,1,2,5,7,8,4,9,6 };
void Max_Heapify(vector<int> &heap, int root, int tail) {
int FatherNode = root, &p = FatherNode;
int lch = p * 2 + 1;
while (lch <= tail) {
if (lch + 1 <= tail && heap[lch] < heap[lch + 1])
lch++;
if (heap[p] > heap[lch])
return;
else {
swap(heap[p], heap[lch]);
p = lch;
lch = p * 2 + 1;
}
}
}
void HeapSort(vector<int> &heap, int sz) {
for (int i = sz / 2 - 1; i >= 0; --i)
Max_Heapify(heap, i, sz - 1);
for (int i = sz - 1; i > 0; --i) {
swap(heap[0], heap[i]);
Max_Heapify(heap, 0, i - 1);
}
}
int main() {
HeapSort(heap,(int) heap.size());
for (int i : heap)
cout << i << ' ';
return 0;
}