淺談堆排序

一:定義算法

堆排序(英語:Heapsort)是指利用這種數據結構所設計的一種排序算法。堆排序是一種樹形選擇排序,在排序過程當中能夠把元素當作是一顆徹底二叉樹,每一個節點都大(小)於它的兩個子節點,當每一個節點都大於等於它的兩個子節點時,就稱爲大頂堆,也叫堆有序; 當每一個節點都小於等於它的兩個子節點時,就稱爲小頂堆數組

下面是咱們要保存在數組中的堆的形式數據結構

二:堆排序算法性能

1.將長度爲n的待排序的數組進行堆有序化構形成一個大頂堆spa

2.將根節點與尾節點交換並輸出此時的尾節點設計

3.將剩餘的n -1個節點從新進行堆有序化3d

4.重複步驟2,步驟3直至構形成一個有序序列blog

三:如何構造堆(大頂堆)排序

例:{5, 2, 6, 0, 3, 9, 1, 7, 4, 8}get

第一次找到[n/2]處,進行構造:
咱們比較父節點,左右孩子結點的大小,將最大的做爲堆頂

 

第二次,咱們對上次找到位置-1便可,找到結點0,對其左右孩子比較,構造這三個結點的最大堆

 

第三次,咱們找到結點6,要對其進行構造,結果以下

第四次(重點),咱們不止要構造雙親和左右孩子,咱們還要比較其孩子結點爲根的堆是否正確,否則咱們須要進行調整

 

咱們發現將8,7,2三個結點變爲了最大堆,可是其中2,3子樹再也不是一個最大堆,咱們須要對其修改

第五次:選取結點9進行構造   

發現以結點5爲根的子樹不是最大堆,咱們須要進行調整

       

     完成構建:

 

四:堆排序(堆存儲在數組中)

第一步:將最大值和最後的一個元素交換

第二步:將剩餘的結點再次進行堆構造

第三步:參照第一步

按照上面循環,最終結果爲

五:性能分析

運行時間主要消耗在構造堆和重建堆時的反覆篩選上。
構造堆的時間複雜度爲O(n)
重建堆時時間複雜度爲O(nlogn)。
因此整體就是O(nlogn)。
不適合排序序列個數較少的狀況
相關文章
相關標籤/搜索