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