#include<iostream>
#include<vector>
using namespace std;
void adjust(vector<int> &num, int i, int len)
{
int large = i;
int left = 2 * i + 1;
int right = 2 * i + 2;
if (left < len && num[left]>num[large])
large = left;
if (right<len && num[right] > num[large])
large = right;
if (large != i)
{
swap(num[large], num[i]);
adjust(num, large, len);
}
}
void build_heap(vector<int> &num)
{
int j = num.size() / 2 - 1;
for (int k = j; k >= 0; k--)
adjust(num, k, num.size());
}
void heap_sort(vector<int> &num)
{
build_heap(num);
for (int i = 0; i < num.size(); i++)
{
swap(num[0], num[num.size() - i - 1]);
adjust(num, 0, num.size() - i - 1);
}
}
int main()
{
vector<int> x = { 1, 6, 2, 3, 10, 9, 2, 14 };
heap_sort(x);
return 0;
}