每天一个小算法(Heapsort)
昨天忘发了,现在补上。
#include "stdio.h" #include "stdlib.h" #define Num 10 void MinHeapFixdown(int a[], int i, int n) { int j, temp; temp = a[i]; j = 2 * i + 1; while (j < n) { if (j + 1 < n && a[j + 1] < a[j]) j++; if (a[j] >= temp) break; a[i] = a[j]; i = j; j = 2 * i + 1; } a[i] = temp; } void MakeMinHeap(int a[], int n) { int i; for (i = n / 2 - 1; i >= 0; i--) { MinHeapFixdown(a, i, n); } } void MinHeapDeleteNumber(int a[], int n) { int temp; temp=a[n-1]; a[n-1]=a[0]; a[0]=temp; } void main() { int arr[Num]={10,29,8,7,6,5,4,3,2,1}; int i,k,temp,n=Num; for(k=n;k>0;k--) { MakeMinHeap(arr,k); MinHeapDeleteNumber(arr,k); } for(i=0;i<Num;i++) { printf("%d\n",arr[i]); } }
代码引用了不少,自己改了改。引用于上一篇文章。