#include<stdio.h> /* Name: Copyright: Author: @dujianjian Date: 15/11/12 23:42 Description: 小顶堆 */ void sift(int a[],int k,int m){ int i = k,j = 2*i+1; int t = a[k]; while(j < m){ if(j<m-1 && a[j]>a[j+1])j++; if(t < a[j]){break;} else{a[i]=a[j];i = j;j = 2*i+1;} } a[i]=t; } void Heapsort(int a[],int n){ for(int i = n/2-1;i >= 0;i--)sift(a,i,n); for(int i = n-1 ;i >= 0;--i){ int t = a[i]; a[i] = a[0]; a[0] = t; sift(a,0,i); // printf("aa\n"); } } int main(){ //int a[10] = {5,9,8,7,2,6,1,0,3,4}; int a[10]={4,1,3,2,16,9,10,14,8,7}; for(int i = 0;i<10;i++) printf("%d ",a[i]); printf("\n"); Heapsort(a, 10); for(int i = 0;i<10;i++) printf("%d ",a[i]); printf("\n"); getchar(); return 0; }
示例结果: