演算法導論第六章 堆排序總結

2022-05-19 15:14:29 字數 2520 閱讀 4804

max-heapify(a, i)

1 l

← left(i)

2 r

← right(i)

3 ifl≤

heap-size[a] and a[l] >

a[i]

4

then

largest←l

5

else

largest←i

6 ifr≤

heap-size[a] and a[r] >

a[largest]

7

then

largest←r

8 if

largest≠i

9

then exchange a[i] ↔a[largest]

10max-heapify(a, largest)

build-max-heap(a)

1

heap-size[a] ←

length[a]

2

fori

←length[a]/2 downto 1

3

do max-heapify(a, i)

heapsort(a)

1 build-max-heap(a)

2 fori←

length[a] downto 2

3

do exchange a[1] ↔a[i]

4

heap-size[a] ←

heap-size[a] - 1

5max-heapify(a, 1)

max-heapify(a,i)

函式通過遞迴,從元素

a[i]

開始與a[i]

的兩個子節點比較,將二者中的較大者與

a[i]

數值對換,如果

a[i]

比兩個子節點數值皆大,則不執行任何操作,並向下一級繼續執行

max-heapify

,即遞迴呼叫。當最後一級執行完畢時,

max-heapify

也就結束了。

max-heapify

的作用就是在執行

build-max-heap(a)

後,將以

a[i]

為子樹的堆中的最大值移動到

a[i]

的位置,即這個子樹的根節點。

build-max-heap(a)

一定要在

max-heapify

之前執行,

build-max-heap(a)

的作用就是從堆的倒數第二層的最後乙個元素開始到堆的頂端位置,迴圈地呼叫

max-heapify

,以實現將堆中最大的元素移動到堆的頂端。

max-heapify

和max-heapify

是區域性與整體的關係,又是被呼叫與呼叫的關係,

max-heapify

完成的是區域性的對較大元素向堆頂方向的移動,而

max-heapify

同過不斷呼叫

max-heapify

,實現了整個堆的將較大元素向堆頂方向的移動。每執行一次

max-heapify

,堆中最大元素一定移動到堆頂。

heapsort(a)

1 build-max-heap(a)//實現 級數大的元素比級數小的元素數值小 這樣的趨勢,

//只是趨勢未必是一定的

2 fori←

length[a] downto 2

3

do exchange a[1] ↔a[i]//

將堆頂最大元素與堆中最後一級最後乙個

//元素的位置交換。

4

heap-size[a] ←

heap-size[a] - 1

5max-heapify(a, 1)

//由於exchange,此時堆頂元素是原堆的最後一級上的較小元

//素,而我們要的是乙個整個堆的最大元素,所以要重新建堆。

//由於之前已經執行過build-max-heap,也就是說已經實現

//「級數大的元素一定比級數小的元素數值小」,所以不需

//要在執行一次build-max-heap,只需執行max-heapify即可。

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

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

演算法導論 第六章 堆排序

二叉 堆資料結構是一種陣列物件,如下圖所知,他可以被視為一顆完全二叉樹。其有如下性質 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 ...