0
点赞
收藏
分享

微信扫一扫

【python】堆排序

Soy丶sauce 03-05 21:00 阅读 4

堆的概念

:一种特殊完全二叉树,也就是二叉树必须全部是满的,但是最后一排可以从右向左缺失。

大根堆:每个节点都比他的子节点大

小根堆:每个节点都比子节点小

堆在代码中的形式

堆在代码中实际上就是列表,只不过我们根据堆与列表的关系,把列表中的数想象为了堆。

这个堆在列表中是这个样子的。

我们从上向下,从左到右依次写入列表中就是这个堆。

父节点跟左子节点的关系为i=2i+1

父节点跟右子节点的关系为i=2i+2

堆的向下调整

有时一个堆并不是大根堆的排序方式

或者这个堆左右子树是大根堆,但整体不是。

可以用这个向下调整的方式进行调整调整成为大根堆。

 堆排序的步骤

1.构建堆

2.取出最上面的数,然后把最后一行的最后一个数放到第一位

3.进行一次向下调整

4.再取出最上面的那个数

5.重复知道数字全部取出为止

构建堆

从最下面一行开始,选出最大的与他们上方的数字比较,把大数放到上面。

排好最底层之后,依次向上面进行向下调整操作。

向下调整代码

因为使用过程中会多次使用到向下调整的代码,所以尽量要提前写好函数。

构建堆代码

原理:找到最后一个不是叶子节点的节点,然后依次向前进行向下调整

 依次出数代码

原理:最上面的数是最大的,那么把最上面的数跟堆最后面的数换位置,之后再把堆的范围减少一进行一次向下调整,然后再重复以上内容。

 

举报

相关推荐

0 条评论