6-5 堆排序

本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000。

函数接口定义:

void HeapAdjust( HeapType  H, int s, int m);

其中L是待排序表,使排序后的数据从小到大排列。
###类型定义:

typedef  int  KeyType;
typedef  struct {                      
  KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
  int Length;      
}SqList;
typedef SqList HeapType; 

输入样例:

第一行整数表示参与排序的关键字个数。第二行是关键字值 例如:

10
5 2 4 1 8 9 10 12 3 6
输出样例:

输出由小到大的有序序列,每一个关键字之间由空格隔开,最后一个关键字后有一个空格。

1 2 3 4 5 6 8 9 10 12 

答案:

void HeapAdjust( HeapType  H, int s, int m){
    int now=s;
    if(s*2<=m&&H.elem[s*2]>H.elem[now]){
        now<<=1;
    }
    if(s*2+1<=m&&H.elem[s*2+1]>H.elem[now]){
        now=s*2+1;
    }
    if(now!=s){
        int t=H.elem[s];
        H.elem[s]=H.elem[now];
        H.elem[now]=t;
        HeapAdjust(H,now,m);
    }
}

 

 
posted @ 2021-11-29 23:35  慢漫曼蔓  阅读(95)  评论(0)    收藏  举报