1066-堆排序

描述

 

给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中堆排序算法进行排序,并输出排序最后结果的相应序列。

 

输入

 

共两行,第一行给出排序元素数目n,第二行给出n个元素,1n100000,每个元素值范围为 [0100000)

 

输出

 

一行,输出排序结果。

 

样例输入

7

48 36 68 72 12 48 2

样例输出

2 12 36 48 48 68 72

#include <iostream>
#define N 100000
using namespace std;
void swap(int &x,int &y)
{
    int z;
    z=x;
    x=y;
    y=z;
}
void adjustdown(int a[],int r,int j)
{
    int child=2*r+1;
    int temp=a[r];
    while(child<=j)
    {
        if((child<j)&&(a[child]<a[child+1]))
            child++;
        if(temp>=a[child]) break;
        a[(child-1)/2]=a[child];
        child=2*child+1;
    }
    a[(child-1)/2]=temp;
}
void heapsort(int a[],int n)
{
    for(int i=(n-2)/2;i>-1;i--)
        adjustdown(a,i,n-1);
    for(int ii=n-1;ii>0;ii--)
    {
        swap(a[0],a[ii]);
        adjustdown(a,0,ii-1);
    }
}
int main()
{
    int n;
    int a[N]={0};
    cin>>n;

    for(int k=0;k<n;k++)
        cin>>a[k];
    heapsort(a,n);
    for(int kk=0;kk<n-1;kk++)
        cout<<a[kk]<<" ";
    cout<<a[n-1]<<endl;

    return 0;
}

  

posted @ 2013-11-22 09:25  七年之后  阅读(223)  评论(0编辑  收藏  举报