#include<iostream>
using namespace std;
void maxHeapfy(int a[], int i, int heapsize)
{
int left=2*i+1, right=2*i+2;
int largest=i;
if(left<heapsize && a[left]>a[largest])
largest=left;
if(right<heapsize && a[right]>a[largest])
largest=right;
if(largest != i){
swap(a[i], a[largest]);
maxHeapfy(a, largest, heapsize);
}
}
void buildHeap(int a[], int n)
{
for(int i=n/2-1;i>=0;i--){
maxHeapfy(a, i, n);
}
}
void heapSort(int a[], int n)
{
buildHeap(a, n);
int heapsize=n;
while(heapsize>1){
swap(a[0], a[heapsize-1]);
heapsize--;
maxHeapfy(a,0,heapsize);
}
}
int main()
{
int a[]={8,3,6,10,55,7};
int n=sizeof(a)/sizeof(a[0]);
heapSort(a, n);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}