#include <iostream>

using namespace std;

int parent(int i)
{
    return i/2;
}

int left(int i)
{
    return 2*i;
}

int right(int i)
{
    return 2*i+1;
}

int MAX_HEAPIFY(int a[],int i,int n)
{
    int l,r,largest;
    l=left(i);
    r=right(i);
    if(l<=n&&a[l]>a[i])
     largest=l;
    else
     largest=i;
    if(r<=n&&a[r]>a[largest])
     largest=r;
    if(largest!=i)
    {
        int tmp;
        tmp=a[largest];
        a[largest]=a[i];
        a[i]=tmp;
        return MAX_HEAPIFY(a,largest,n);
    }
    return 0;
}

int BUILD_MAX_HEAP(int a[],int n)
{
    for(int i=n/2;i>=1;i--)
    MAX_HEAPIFY(a,i,n);
    return 0;
}

int HEAPSORT(int a[],int n)
{
    BUILD_MAX_HEAP(a,n);
    for(int i=n;i>=2;i--)
    {
        int tmp;
        tmp=a[1];
        a[1]=a[i];
        a[i]=tmp;
        n--;
        MAX_HEAPIFY(a,1,n);
    }
    return 0;
}

int main()
{
    int data[20],n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>data[i];
    HEAPSORT(data,n);
    for(int i=1;i<=n;i++)
    cout<<data[i]<<" ";
    cout<<endl;
    return 0;
}

 

posted @ 2016-05-12 15:45  邻家那小孩儿  阅读(99)  评论(0编辑  收藏  举报