演算法導論第六章堆排序6 2

2021-07-13 19:49:42 字數 811 閱讀 8484

6.2-1                      第一遍交換10和3   第二遍交換10和9

6.2-2            

6.2-2  

min-heapify(a, i)

1 l <- left(i)

2 r <- right(i)

3 if l <= heap-size[a] and a[l] < a[i]

4 then smallest <- l

5 else smallest <- i

6 if r <= heap-size[a] and a[r] < [smallest]

7 then smallest <- r

8 if smallest != i

9 then exchange a[i] <-> a[smallest]

10

執行時間複雜度均為o(h)

6.2-3  程式 自動退出

6.2-4  所述情況i為葉子結點  左右孩子為空   自動退出

6.2-5  

max-heapify(a,i)

while (i<=a.heap-size/2)//由於6.2-4知道,i>a.heap-size/2以後,最大堆不會有任何改變。

6.2-6 可以通過分析得出結果最壞情況從根節點到葉子節點一直都會呼叫max-heapify ,而堆的高度為h,因此最壞情況為ω(lgn)。

演算法導論 第六章《堆排序》

本章開始介紹了堆的基本概念,然後引入最大堆和最小堆的概念。全章採用最大堆來介紹堆的操作,兩個重要的操作是調整最大堆和建立最大堆,接著著兩個操作引進了堆排序,最後介紹了採用堆實現優先順序佇列。二叉 堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹。除了最底層外,該樹是完全充滿的,而且是從左到右填充...

演算法導論 第六章 堆排序

二叉 堆資料結構是一種陣列物件,如下圖所知,他可以被視為一顆完全二叉樹。其有如下性質 1 對於i節點 i表示下標 其父節點為li 2 左孩子節點為2i,右孩子節點為2i 1 2 最大堆滿足 a parent i a i 最小堆滿足 a parent i a i 3 堆的高度為 lgn 4 子陣列元素...

演算法導論第六章 堆排序

堆排序 主要是二叉堆,是乙個陣列,可以近似看作是一棵完全二叉樹。最壞情況執行時間為 n log n 主要性質 1.對於任意乙個下標index,書上寫的是左子女的下標為 2 index,右子女為 2 index 1 但是在實際程式設計中,下標是從0開始的,所以下標的變化應該為 左子女為2 index ...