题目:堆排序实现

假设有一个数据类型为整型的一维数组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:内部排序


ShadowCK
51 声望9 粉丝

这个人是个萌新,什么都没有留下。