您的位置:首页 > 其它

每天一个小算法(Heapsort)

2014-10-16 00:46 281 查看
#include "stdio.h"
#include "stdlib.h"

#define Num 10

Heap(int arr[],int i,int n)                   //堆化操作,最大堆
{
int ileft = 2*i+1;
int iright = ileft+1;
int h,temp;

temp = arr[i];

while(ileft < n)
{

if(iright < n && arr[ileft] < arr[iright]) //要用ileft和iright作为限制的条件,组合用能避免最末数的麻烦
{
h = iright;
}
else
{
h = ileft;
}

if(temp > arr[h])
{
break;
}

arr[i] = arr[h];
i=h;
ileft=2*i+1;
iright=ileft+1;
}

arr[i] = temp;
}

main()
{
int arr[Num]={21,32,3,42,634,13,8,234,12,10};
int i,k,temp;

for(k = Num;k > 1;k--)				//数组中用到的个数越来越少
{
for(i = k/2-1;i >= 0;i--)
{
Heap(arr,i,k);
}

temp = arr[k-1];			//最上面和最后一个交换,实质为删除操作
arr[k-1] = arr[0];
arr[0] = temp;
}

for(i=0;i<Num;i++)
{
printf("%d\n",arr[i]);
}
}


今天自己编了一个,比较啰嗦,膜拜一下前面连接中作者。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: