堆排序的C语言实现

来源:互联网 发布:新淘宝直通车怎么开通 编辑:程序博客网 时间:2024/05/20 18:19

//堆排序,初始化堆,然后不断进行堆的调整
//大顶堆,每次取最大的
#include<iostream>
using namespace std;
void HeapAdjust(int a[], int s,int m)
{
    int i, j, tmp;
    tmp = a[s];
    for(j=2*s;j<=m;j*=2){
        if(j<m&&a[j]<a[j+1])++j;
        if(tmp>=a[j]) break;
        a[s]=a[j];s=j;
    }
    a[s] = tmp;
}
void HeapSort(int a[], int n)
{
    int i,t;
    for(i=n/2;i>0;i--)
        HeapAdjust(a,i,n);//initialize the heap
    for(i=n;i>1;i--)
    {
        t = a[i];
        a[i] = a[1];
        a[1] = t;
        HeapAdjust(a,1,i-1);//每次从第1个调整到未排好序的一个
    }
}
int main()
{
    int i, a[20],n=10;
    for(i=1;i<=n;i++)
        cin>>a[i];
    HeapSort(a,n);
    for(i=1;i<=n;i++)
        cout<<a[i];
    return 0;
}