参考:https://www.jianshu.com/p/d174f1862601
堆排序涉及到的概念
- 堆排序是利用 堆进行排序的
- 堆是一种完全二叉树
- 堆有两种类型: 大根堆 小根堆
-
两种类型的概念如下:
大根堆:每个结点的值都大于或等于左右孩子结点
小根堆:每个结点的值都小于或等于左右孩子结点
因为比较抽象,所以专门花了两个图表示
主要理解怎么生成大顶堆!其余还是很好理解的。当然这个写大顶堆的方式不一定是最合适的方式。
你能写出伪代码吗?如果能也算自己理解了
讲解:
- 因为引入了一个辅助空间,所以使
L_length = len(L) - 1
- 第一个循环做的事情是把序列调整为一个大根堆(
heap_adjust
函数) - 第二个循环是把堆顶元素和堆末尾的元素交换(
swap_param
函数)