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); } }

浙公网安备 33010602011771号