数据结构之堆的插入、取值、排序(细致讲解+图片演示)

数据结构之堆(Heap):插入、取值、排序。

堆是一种数据结构,分为最小堆和最大堆,能够用二叉树来表示。数据结构

在二叉树的任意的一个三角结构中(一个父节点,两个子节点),须要知足如下两个条件:spa

一、父节点要是最小的,就是最小堆(或最大的,就是最大堆),两个子节点之间没有要求blog

二、数据插入的顺序是一层一层的,只有上一层存满,才会有下一层排序

 

下面咱们以图片的形式演示最小堆的插入、取值、和排序操做,只要知道最小堆的原理,那么最大堆也就明白了。图片

 

假设咱们有一个原始的最小堆以下:原理

 

 

插入操做:

当插入一个新值时,首先将值放到树的最后的位置,以下图所示。二叉树

而后将这个值与父元素比较,若是不知足规则1,则与父元素替换(以下图所示)。im

 第一步数据

第二步db

第三步

 

由图可知,在插入操做中,交换次数最大即为树的高度(log n

 

最小值操做:

在最小堆中,拿出一个最小值,固然就是拿出第一个数啦~不过拿完之后树不就没有“头”了?

不用担忧,咱们能够把最后一个数放到头的位置,这样树的结构就不会改变,并且操做简单(由于是最后一个数)。

固然,由于是最后一个数,必然会出现不知足条件1的状况,因此咱们须要把新的树头与子元素比较替换,下面是图片演示:

假设咱们有一个原始的最小堆以下所示,接下来咱们要取最小值:

 

不过交换完极可能是不知足条件1的,那么咱们就须要比较替换,替换规则是和两个子元素中最小的一个替换

由图可知,在取值操做中,交换次数最大也为树的高度(log n

 

堆的排序:

咱们知道了如何取最小值,那么堆的排序简单啦~只要依次取堆的最小值,那么当堆取完时,咱们取出的数据不就是一个从小到大的序列嘛!

相关文章
相关标签/搜索