每天一个小算法(Heapsort)
#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]);
}
}
今天自己编了一个,比较啰嗦,膜拜一下前面连接中作者。

浙公网安备 33010602011771号