堆排序的C語言代碼實現code
#include<stdio.h> int a[100]; void Exchange(int i,int n)//將最大葉子結點與根結點交換 { int temp; temp = a[i]; a[i] = a[n]; a[n] = temp; } void Created(int n) { if(n == 2){//當只剩兩個的時候,直接比較大小 先輸出最大的 而後輸出最小的 if(a[0] > a[1]){ printf("%d %d\n",a[0],a[1]); } else printf("%d %d\n",a[1],a[0]); return; } int i; for(i = n/2-1;i >= 0; i--) //比較每個根結點與其葉子結點的大小 而且將大於根結點的葉子結點與根結點交換 {//最後一個根結點是第n/2個 可是第一個數下標爲0 因此最後一個根結點下標爲n/2-1 if(a[2*i+1] > a[i] && 2*i+1 < n)//與左孩子進行比較 Exchange(i,2*i+1); if(a[2*i+2] > a[i] && 2*i+2 < n)//與右孩子進行比較 Exchange(i,2*i+2); } int t; t = a[0];//將第一個根結點與最後一個葉子結點互換 a[0] = a[n-1]; a[n-1] = t; printf("%d ",a[n-1]);//輸出最大的結點 Created(n-1);//將是輸出的結點彈出 } int main() { int n; printf("請輸入須要排序的元素的個數:"); scanf("%d",&n); printf("請輸入%d個元素:",n); for(int j =0; j <n; j++) { scanf("%d",&a[j]); } Created(n); return 0; }