數據結構之堆的插入、取值、排序(細致講解+圖片演示)


數據結構之堆(Heap):插入、取值、排序。

堆是一種數據結構,分為最小堆和最大堆,可以用二叉樹來表示。

在二叉樹的任意的一個三角結構中(一個父節點,兩個子節點),需要滿足以下兩個條件:

1、父節點要是最小的,就是最小堆(或最大的,就是最大堆),兩個子節點之間沒有要求

2、數據插入的順序是一層一層的,只有上一層存滿,才會有下一層

 

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

 

假設我們有一個原始的最小堆如下:

 

 

插入操作:

當插入一個新值時,首先將值放到樹的最后的位置,如下圖所示。

然后將這個值與父元素比較,如果不滿足規則1,則與父元素替換(如下圖所示)。

 第一步

第二步

第三步

 

由圖可知,在插入操作中,交換次數最大即為樹的高度(log n

 

最小值操作:

在最小堆中,拿出一個最小值,當然就是拿出第一個數啦~不過拿完以后樹不就沒有“頭”了?

不用擔心,我們可以把最后一個數放到頭的位置,這樣樹的結構就不會改變,而且操作簡單(因為是最后一個數)。

當然,因為是最后一個數,必然會出現不滿足條件1的情況,所以我們需要把新的樹頭與子元素比較替換,下面是圖片演示:

假設我們有一個原始的最小堆如下所示,接下來我們要取最小值:

 

不過交換完很可能是不滿足條件1的,那么我們就需要比較替換,替換規則是和兩個子元素中最小的一個替換

由圖可知,在取值操作中,交換次數最大也為樹的高度(log n

 

堆的排序:

我們知道了如何取最小值,那么堆的排序簡單啦~只要依次取堆的最小值,那么當堆取完時,我們取出的數據不就是一個從小到大的序列嘛!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM