假設有一個數據類型爲整型的一維數組A,A 中的數據元素呈無序狀態,編寫一個採用堆排序法將A中的數據元素按由小到大進行排序的程序。數組
#include<stdio.h> int A[100]; //調整重建堆 void sift(int r[], int k, int n){ int i = k, j = 2 * i; int temp = r[i]; while( j <= n ){ if( j<n && r[j]<r[j+1] ) j++; if( temp<r[j] ){ r[i] = r[j]; i = j; j = 2 * i; } else break; } r[i] = temp; } //堆排序 void HeapSort(int r[], int n){ int i, temp; for(i=n/2; i>=1; i--){ sift(r, i, n); } for(i=n; i>=2; i--){ temp = r[1]; r[1] = r[i]; r[i] = temp; sift(r, 1, i-1); } } void main(){ int n, i; printf("* 請輸入待排序序列的長度:"); scanf("%d",&n); printf("* 請輸入該待排序序列:"); for(i=1; i<=n; i++){ scanf("%d",&A[i]); } HeapSort(A, n); printf("* 該序列由小到大排序結果爲:\n"); for(i=1; i<=n; i++){ printf("%d ",A[i]); } }
西北大學MOOC:內部排序code