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

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

堆是一種數據結構,分爲最小堆和最大堆,能夠用二叉樹來表示。數據結構

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

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

二、數據插入的順序是一層一層的,只有上一層存滿,纔會有下一層排序

 

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

 

假設咱們有一個原始的最小堆以下:原理

 

 

插入操做:

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

而後將這個值與父元素比較,若是不知足規則1,則與父元素替換(以下圖所示)。im

 第一步數據

第二步db

第三步

 

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

 

最小值操做:

在最小堆中,拿出一個最小值,固然就是拿出第一個數啦~不過拿完之後樹不就沒有「頭」了?

不用擔憂,咱們能夠把最後一個數放到頭的位置,這樣樹的結構就不會改變,並且操做簡單(由於是最後一個數)。

固然,由於是最後一個數,必然會出現不知足條件1的狀況,因此咱們須要把新的樹頭與子元素比較替換,下面是圖片演示:

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

 

不過交換完極可能是不知足條件1的,那麼咱們就須要比較替換,替換規則是和兩個子元素中最小的一個替換

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

 

堆的排序:

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

相關文章
相關標籤/搜索