数据结构之堆的插入取值排序(细致讲解+图片演示)
Posted 宇的季节
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之堆的插入取值排序(细致讲解+图片演示)相关的知识,希望对你有一定的参考价值。
数据结构之堆(Heap):插入、取值、排序。
堆是一种数据结构,分为最小堆和最大堆,可以用二叉树来表示。
在二叉树的任意的一个三角结构中(一个父节点,两个子节点),需要满足以下两个条件:
1、父节点要是最小的,就是最小堆(或最大的,就是最大堆),两个子节点之间没有要求
2、数据插入的顺序是一层一层的,只有上一层存满,才会有下一层
下面我们以图片的形式演示最小堆的插入、取值、和排序操作,只要知道最小堆的原理,那么最大堆也就明白了。
假设我们有一个原始的最小堆如下:
插入操作:
当插入一个新值时,首先将值放到树的最后的位置,如下图所示。
然后将这个值与父元素比较,如果不满足规则1,则与父元素替换(如下图所示)。
第一步
第二步
第三步
由图可知,在插入操作中,交换次数最大即为树的高度(log n)
取最小值操作:
在最小堆中,拿出一个最小值,当然就是拿出第一个数啦~不过拿完以后树不就没有“头”了?
不用担心,我们可以把最后一个数放到头的位置,这样树的结构就不会改变,而且操作简单(因为是最后一个数)。
当然,因为是最后一个数,必然会出现不满足条件1的情况,所以我们需要把新的树头与子元素比较替换,下面是图片演示:
假设我们有一个原始的最小堆如下所示,接下来我们要取最小值:
不过交换完很可能是不满足条件1的,那么我们就需要比较替换,替换规则是和两个子元素中最小的一个替换
由图可知,在取值操作中,交换次数最大也为树的高度(log n)
堆的排序:
我们知道了如何取最小值,那么堆的排序简单啦~只要依次取堆的最小值,那么当堆取完时,我们取出的数据不就是一个从小到大的序列嘛!
以上是关于数据结构之堆的插入取值排序(细致讲解+图片演示)的主要内容,如果未能解决你的问题,请参考以下文章