您的位置:首页 > 理论基础 > 数据结构算法

一步一步复习数据结构和算法基础-堆排序

2012-07-24 20:58 260 查看
//任何一个非终端结点的值都大于等于(或小于等于)它左右孩子的值
//输出堆顶的最小值之后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素中的次小值。
//如此反复执行,便能得到一个有序序列.
#include<stdio.h>
void shift(int a[],int i,int m)
{
int k,t;
t=a[i];k=2*i+1;
while(k<m)
{
if((k<m-1)&&(a[k]<a[k+1])) k++;
if(t< a[k]) {a[i]=a[k];i=k;k=2*i+1;}
else break;
}
a[i]=t;
}
void heap(int a[],int n)  //a 为排序数组,n为数组大小(编号0-n-1)
{
int i,k;
for(i=n/2-1;i>=0;i--) shift(a,i,n);
for(i=n-1;i>=1;i--)
{
k=a[0];a[0]=a[i];a[i]=k;
shift(a,0,i);
}

}
void main()
{
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
heap(a,10);
for(i=0;i<10;i++)
printf("%-2d",a[i]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 算法 终端