真诚的感谢作者:本来来源:https://blog.csdn.net/MaxineZhou/article/details/89314044
1. 什么是堆
答:堆是一个特殊的完全二叉树
堆的结构特点:
大顶堆:所有的父节点都比子节点大
小顶堆:所有的父节点都比子节点小
大顶堆 小顶对
5. 堆的存储
那么堆是如何存在在顺序表中的呢?如图所示,如果父节点的编号为k,那么他的做儿子的编号为2k右儿子的编号为2k+1;他总儿子的编号为x,那么他父亲的编号为x/2
2. 堆的建立和堆排序
80先和它的两个儿子20和70比较,80大于两个儿子且20是较小的儿子,所以两者交换,保证交换上去的父节点是比两个儿子小的,80再和现在的两个儿子30和50比较,依然和选择和30做交换,最后和两个儿子60,40比较,最后和40做交换。先插入的数80最后找到了自己的位置。
我在面试的时候问道过,从百万条数据中找出最大的10条数据的最优算法: