「堆排序」問題——C語言實現

題目:堆排序實現

假設有一個數據類型爲整型的一維數組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