堆排序

堆排序

#include<iostream>
using namespace std;

void Sift(int r[], int k, int m)
{
    int j=2*i;
    while(j<=m)
    {
        if(j<m&&r[j]<r[j+1]) j++;
        if(r[i]>r[j]) break;
        else 
        {
            int temp;
            temp=r[i];
            r[i]=r[j];
            r[j]=temp;
            i=j;
            j=2*i;
        }
    }
}

void HeapSort(int r[], int n)
{
    for(int i=n/2; i>0; i--)
    {
        Sift(r,i,n);
    }
    for(int i=1; i<n; i++)
    {
        int temp;
        temp = r[1];
        r[1] = r[n-i+1];
        r[n-i+1] = temp;
        Sift(r,1,n-i);
    }
}

int main()
{
    int r[100];
    int n;
    cin>>n;
    for(int i=1; i<=n; i++) cin>>r[i];
    HeapSort(r,n);
    for(int i=1; i<=n; i++) cout<<r[i]<<" ";
    return 0;
}

 

posted @ 2017-11-30 14:45  magicalzh  阅读(183)  评论(0)    收藏  举报