您的位置:首页 > 编程语言 > C语言/C++

堆排序的C语言实现

2013-08-12 15:28 295 查看
//堆排序,初始化堆,然后不断进行堆的调整

//大顶堆,每次取最大的

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: