#include<iostream>
#include
<algorithm>
using namespace std;
int A[11],heap_size;
void MaxHeapify(int A[],int i)
{
    
int largest=-1;
    
int left=2*i;//获取根节点的左孩子
    int right=2*i+1;//获取根节点的右孩子
    if(left<=heap_size&&A[left]>A[i])
        largest
=left;
    
else
        largest
=i;
    
if(right<=heap_size&&A[right]>A[largest])
        largest
=right;
    
if(largest!=i)//根节点不是最大值则交换后继续递归
    {
        swap(A[i],A[largest]);
        MaxHeapify(A,largest);
    }

}

void BuildMaxHeap(int A[])
{
    
for(int i=10/2;i>=1;i--)
        MaxHeapify(A,i);
}

int main()
{
    
int i;
    heap_size
=10;
    
for(i=1;i<11;i++)
        cin
>>A[i];
    BuildMaxHeap(A);
    cout
<<"建立的最大堆为:";
    
for(i=1;i<11;i++)
        cout
<<A[i]<<"-";
    cout
<<endl;
    
for(i=10;i>1;i--)
    
{
        swap(A[i],A[
1]);
        heap_size
--;
        MaxHeapify(A,
1);
    }

    cout
<<"排序后的结果为:";
    
for(i=1;i<11;i++)
        cout
<<A[i]<<" ";
    cout
<<endl;
    
return 0;
}