堆排序是是指利用堆這種數據結構所設計的一種排序算法。 c語言的實現如下: [cpp] #include <stdio.h> #define SIZE 10 //打印數組 void display(int array[],int size){ printf("the array is:"); int i; for(i=0;i<size;i++){ printf("%d ",array[i]); } printf("\n"); } //創建堆,使最大的數位於樹根 void createHeap(int array[], int size){ int parent,child,temp; //剛開始時,parent的值為最後一個父節點,依次往前將斤左右孩子中較大的節點與父節點交換,最後使樹根為最大數 for(parent=(size+1)/2-1;parent>=0;parent--){ //獲取父節點的左孩子 child = parent*2+1; //如果該父節點存在右孩子,並且比做孩子大,則使用右孩子,否則還是使用左孩子 if((child+1)<=size){ if(array[child+1] > array[child]){ child++; } } //將左右孩子中較大者與父節點交換 if(array[parent] < array[child]){ temp = array[parent]; array[parent] = array[child]; array[child] = temp; } } } //堆排序 void heap(int array[], int size){ int i,temp; for(i=size-1;i>=0;i--){ //創建堆,使最大的數位於樹根 createHeap(array,i); //將樹根和最後一個節點交換 temp = array[i]; array[i] = array[0]; array[0] = temp; display(array,SIZE); } } www.2cto.com int main(void){ int array[SIZE]={34,45,1,39,21,68,65,100,4,51}; display(array,SIZE); //堆排序函數 heap(array,SIZE); display(array,SIZE); return 0; }