堆排序Heap sort

堆排序有點小複雜,分紅三塊html

第一塊,什麼是堆,什麼是最大堆數組

第二塊,怎麼將堆調整爲最大堆,這部分是重點數據結構

第三塊,堆排序介紹htm


第一塊,什麼是堆,什麼是最大堆blog

什麼是堆排序

這裏的堆(二叉堆),指得不是堆棧的那個堆,而是一種數據結構。遞歸

堆能夠視爲一棵徹底的二叉樹,徹底二叉樹的一個「優秀」的性質是,除了最底層以外,每一層都是滿的,這使得堆能夠利用數組來表示,每個結點對應數組中的一個元素.索引

數組與堆之間的關係get

Heap1

二叉堆通常分爲兩種:最大堆和最小堆。it

什麼是最大堆

堆中每一個父節點的元素值都大於等於其孩子結點(若是存在),這樣的堆就是一個最大堆

所以,最大堆中的最大元素值出如今根結點(堆頂)

節點與數組索引關係

對於給定的某個結點的下標i,能夠很容易的計算出這個結點的父結點、孩子結點的下標,並且計算公式很漂亮很簡約

Image(2)

第二塊,怎麼將堆調整爲最大堆,這部分是重點

整個過程以下圖所示

在4,14,7這個小堆裏邊,父節點4小於左孩子14,因此二者交換

在4,2,8這個小堆裏邊,父節點4小於右孩子8,因此二者交換

Heap3

上圖展現了一趟調整的過程,這個過程遞歸實現,直到調整爲最大堆爲止

第三塊,堆排序介紹

堆排序就是把堆頂的最大數取出,

將剩餘的堆繼續調整爲最大堆,具體過程在第二塊有介紹,以遞歸實現

剩餘部分調整爲最大堆後,再次將堆頂的最大數取出,再將剩餘部分調整爲最大堆,這個過程持續到剩餘數只有一個時結束

下邊三張圖詳細描述了整個過程

Heap4

Heap5

Heap6

 

參考文章

http://www.cnblogs.com/kkun/archive/2011/11/23/2260286.html

相關文章
相關標籤/搜索