Heap Sort

#include<iostream>
using namespace std;

const int MAX = 1001;
int l[MAX];

//Heap Sort
void HeapAdjust(int s, int m)
{
    int rc = l[s];
    for(int j=2*s;j<=m;j*=2)
    {
        if(j<m && l[j]<l[j+1]) ++j;
        if(rc>=l[j]) break;
        l[s]=l[j];
        s=j;
    }
    l[s]=rc;
}

void HeapSort(int n)
{
    for(int i=n/2;i>0;--i)
        HeapAdjust(i, n);
    for(int i=n;i>1;--i)
    {
        int temp = l[1];
        l[1]=l[i];
        l[i]=temp;
        HeapAdjust(1, i-1);
    }
}

int main()
{
    int n;
    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>l[i];

    HeapSort(n);

    for(int i=1;i<=n;i++)
        cout<<l[i]<<" ";
    cout<<endl;

    return 0;
}

  

posted @ 2017-01-05 10:24  KennyRom  阅读(141)  评论(0编辑  收藏  举报