python算法+数据结构——堆排序(2)

:一种特殊的完全二叉树结构
(1)大跟堆:一颗完全二叉树,满足任一节点都比其孩子节点大。
(2)小根堆:一种完全二叉树,满足任一节点都比其孩子节点小。
在这里插入图片描述
堆的向下调整:当根节点的左右子树都是堆时,可以通过一次向下的调整来将其变换成另一个堆。
咱们来看一个例子:
在这里插入图片描述
现在要求将这个树变化为大根堆(满足任一节点都比其孩子节点大),咱们可以发现最上面的2要比其孩子节点7,9都小,那么将两个孩子节点中最大的替换道到2的位置才能一步步构成大根堆,那么变换后:
在这里插入图片描述
这时我们发现如果把2放在9的位置还是不能构成大根堆,因为2比8,5都要小,所以要将8放到原来9的位置,现在2的位置变换为:
在这里插入图片描述
同理我们可以看到此时2和6,4比还是小,所以取6,4中大的数6,放到原来8的位置现在2的位置,变换为:
在这里插入图片描述
至此我们发现已经满足大根堆的要求,说明我们经过变换,将这个树变换为大根堆。
了解堆的向下调整之后,咱们就可以来看看
堆的排序过程:
1.建立堆。
2.得到堆顶元素,为最大元素。
3.去掉堆顶,将堆的最后一个元素放到堆顶,此时可以通过一次调整(向下调整)重新使堆有序。
4.堆顶元素为第二大元素。
5.重复步骤三直到堆变空。
咱们利用上面的例子解释一下这个过程:
在这里插入图片描述
9在堆顶此时是堆的最大元素,将9取出:在这里插入图片描述
再将这个堆最后一个元素放到堆顶
在这里插入图片描述
之后通过堆的向下的调整(上面讲的)重新使堆有序
在这里插入图片描述
经过变换又变成一个大根堆,重复步骤三,将此时堆顶的8取出,再将堆的最后一个元素3,放在堆顶,再进行堆的向下调整…以此进行直到堆变空。
好接下来咱们看下,向下调整的代码:
在这里插入图片描述
主体函数:
在这里插入图片描述
理解容易代码难写,大家有不明白的地方私信我。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2019.09.04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值