#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void print(vector<int> v)
{
for(int i=0;i<v.size();i++)
cout<<v[i]<<" ";
}
void sift(int low,int high,vector<int>&v)//调整low为根部的树
{
int father=low;
int child=2*low+1;
while(child<high)
{
if( child+1<high && v[child]<v[child+1] )//指向最大的
child++;
if(v[child]>v[father])
{
swap(v[child],v[father]);
father=child;
child=father*2+1;
}
else break;
}
}
void HeapSort(vector<int>&v)//先建堆
{
int n=v.size();
for(int i=n/2-1;i>=0;i--)//从第一个非叶子节点开始
sift(i,v.size()-1,v);
for(int i=v.size()-1;i>=0;i--)//每次都将最大的跳出来
{
swap(v[0],v[i]);//把最大的值放在后面
sift(0,i-1,v);
}
print(v);
}
int main()
{
vector<int> v;
v.push_back(49);
v.push_back(38);
v.push_back(65);
v.push_back(97);
v.push_back(76);
v.push_back(13);
v.push_back(27);
v.push_back(49);
HeapSort(v);
}