堆排序
View Code
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define MAXLEN 10 4 #define K 3 5 6 7 void HeapAdjust(int array[], int i, int len) 8 { 9 int temp=array[i]; 10 int j; 11 for (j=2*i; j<len; j*=2) 12 { 13 if (j<len && array[j] < array[j+1]) 14 { 15 ++j; 16 } 17 if (temp < array[j]) 18 { 19 array[i]=array[j]; 20 i=j; 21 } 22 else 23 break; 24 } 25 array[i]=temp; 26 27 } 28 29 void Swap(int& a,int& b) 30 { 31 int temp; 32 temp=a; 33 a=b; 34 b=temp; 35 } 36 37 38 void HeapSort(int array[], int len) 39 { 40 int i; 41 for (i=len/2-1; i>=0; --i) 42 { 43 HeapAdjust(array, i, len); 44 } 45 for (i=len-1; i>=1; --i) 46 { 47 Swap(array[0], array[i]); 48 HeapAdjust(array,0,i-1); 49 } 50 } 51 52 int main() 53 { 54 int array[MAXLEN]; 55 int i; 56 for(i=0;i<MAXLEN;++i) 57 array[i] =MAXLEN-i; 58 HeapSort(array,MAXLEN); 59 for (i=0; i<MAXLEN; i++) 60 { 61 printf("%d ", array[i]); 62 } 63 return 0; 64 }