什么时堆,以及堆排序的原理

真诚的感谢作者:本来来源: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条数据的最优算法:

 

posted @ 2020-05-13 15:46  dousil  阅读(183)  评论(0编辑  收藏  举报