小根堆:每一个根结点比左右孩子小
堆实际上是完全二叉树,第i个元素,他的左孩子是2i,右孩子是2i+1。
大根堆:根大于左右孩子,满足孩子结点的值小于根结点
这是一个小根堆:
有小有大,不对:
堆排序定义:
知道最大值和最小值,拿走(输出)
解决两个问题:
1.从无序变成堆
2.调整
怎样调整?以小根堆为例
1.输出堆顶,用编号最大的代替它
2.小的向上,交换
3.反复,筛选
大根堆也一样道理
看一个例子:
这里已经是小根堆了
1,输出堆顶,一层一层来,97是最后一个
2.挑一个小的和他交换,27比较小,挑27
3.继续和左右孩子比,挑小的和他交换
97到叶子了,调整完成小根堆了
算法:Heap是堆的意思,中文为堆调整
总结: