堆(Heap)

大根堆:完全二叉树中,根>=左、右
小根堆:完全二叉树中,根<=左、右

相关知识------二叉树的顺序存储

建立大根堆
i的左孩子:2i
i的右孩子:2i+1
i的父结点:i/2
思路:把所有的非终端结点都检查一遍,是否满足大堆根的要求,如果不满足,则进行调整

先处理编号最大的根


接下来处理3号结点


接下来依次处理剩下的根结点

处理完53结点后需要将更下的元素"下坠"


建立大根堆(代码)

基于大根堆进行排序
每一趟将堆定元素加入有序子序列(与待排序序列中的最后一个元素交换),交换完后调整排序序列,再次构成一个大根堆
第一趟
第二趟

.....n-1次排序后

大根堆:递增序列
小根堆:递减序列
基于大根堆进行排序 (代码)

算法效率分析
建堆的时间复杂度:O(n)
下坠的时间复杂度:




稳定性




总结:

练习:
