堆/堆排序特點

/堆排序特點

數組形式保存的堆結構(這裏例舉完全二叉樹,元素N個,樹的高度即爲n=lgN

堆結構中操作

a.       插入-新元素入堆,新元素置於樹的最後一個位置,依次向上father比較(TOP-UP),找到合適的位置,比較次數最長爲lgN

b.       取堆頂(最大/最小)元素-重新構造堆,把最後一個元素置於堆頂,從上而下(TOP-DOWN)比,比較次數最多爲lgN

c.       查找-查找給定KEY的元素位置,從堆頂開始,至上而下(TOP-DOWN)比較,每次比較3次,時間複雜度也爲OlgN),但比較次肯定3倍於取堆頂元素;

也可以從堆底自下而上比較,再在左右子樹切換,速度快於上面方法;

d.       刪除-刪除給定KEY值的元素,同查找,在找到之後需要從新構造堆,查找+構造的比較次數剛好爲lgN

 

構造堆

a.       從數組第1個元素開始,從上往上構造堆,即重複插入操作,堆元數數量從1遞增到N,最壞情況,每個新插入元素都要走到堆頂,那麼比較次數爲,

 

利用循環隊列的特點可以算出,這裏2Sn-Sn可以算出,可見算法a的時間複雜度爲ONlgN);

b.       從準堆底(數組最後1個元素的父結點)開始自下而上(TOP-UP)構建堆,這樣構建堆時其左右子樹均爲堆,只須把當前元素和左右子樹堆頂比較(比較2次),再遞歸下移,直至新堆完成,重複這一過程,直至到達堆頂。

最壞情況每次比較新的堆頂元素都要下移到堆底,比較次數爲,

 

 

 

 

計算方法同上a,比較次數和a一樣都要乘以2

對比ab時間複雜度分別爲ONlgN)、ON),在最壞情況下算法b都優於a

 

堆排序

取最大(小)的k 個元素,k<=N

那麼對於算法b,只須構造1次堆,且取k次堆頂,在最壞情況下,需要的時間爲2N+2klgN,因此當前k<<N時,時間複雜度爲O(N),當k接近N時,時間複雜度爲O(NlgN),因此取k個元素的時間介於(O(N)ONlgN)

 

k=N時,就是對整堆進行排序,最壞情況下時間都爲O(NlgN)

 

 

發佈了39 篇原創文章 · 獲贊 9 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章