堆排序中每次堆调整后的次序

堆排序(heap sort)是对简单选择排序的一种改进,改进的着眼点是:如何减少记录的比较次数。简单选择排序在一趟排序中仅选出最小记录,没有把一趟的比较结果保存下来,因而记录的比较次数较多。堆排序在选出最小记录的同时,也找出较小记录,减少了选择的比较次数,从而提高整个排序的效率。堆排序算法的基本思想如下:
首先将待排序序列构造成一个大根堆,即选出了堆中所有记录的最大者,将它从堆中移走,并将剩余的记录再调整成堆,这样又找出了次小的记录,以此类推,直到堆中只有一个记录。
现在希望算出从小到大堆排序的过程中,每次进行堆调整后(包括构造初始堆),打印输出堆的次序。
在这里插入图片描述
【输入形式】
第一行一个整数N, 第二行有N个整数,无序。0<N <= 100
【输出形式】
输出共 N 行。第i行对应第i次堆调整后N-i+1个整数的次序。
【样例输入】
5
2 3 1 5 4
【样例输出】
5 4 1 3 2
4 3 1 2
3 2 1
2 1
1

分析:
堆排序 利用完全二叉树的性质 构建一个大根堆(小根堆)把最大的(最小的)放到根节点 然后把根节点与最后一个结点交换数值
本质上就是利用重复构建大根堆(小根堆)的方法,找到最大(最小)的值 然后利用和最后一个结点交换的方式进行排序

构建堆的函数

void adjust(int arr[],int n,int i)
{
   
    int left=i*2+1;//下标为i的左孩子
    int right=i*2+
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值