用函数实现堆排序,并输出每趟排序的结果
第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据
第一行:初始建堆后的结果 其后各行输出交换堆顶元素并调整堆的结果,数据之间用一个空格分隔
10 5 4 8 0 9 3 2 6 7 1
9 7 8 6 4 3 2 5 0 1 8 7 3 6 4 1 2 5 0 9 7 6 3 5 4 1 2 0 8 9 6 5 3 0 4 1 2 7 8 9 5 4 3 0 2 1 6 7 8 9 4 2 3 0 1 5 6 7 8 9 3 2 1 0 4 5 6 7 8 9 2 0 1 3 4 5 6 7 8 9 1 0 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
#includeint n; void Headadjust(int a[],int i,int n) { for(int j = 2*i; j<=n; j*=2) { if(j 0; i--)//初始化调整成大根堆 { Headadjust(a,i,n); } for(j = 1; j <=n; j++) { printf("%d ",a[j]); } printf("n"); for(i = n; i > 1; i--) { j = a[i];//将栈顶元素拿到后面 a[i] = a[1]; a[1] = j; Headadjust(a,1,i-1);//将a[1...(i-1)]重新排成大根堆 for(j = 1; j <=n; j++) { printf("%d ",a[j]); } printf("n"); } return 0; }



