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 ...