演算法導論 第六章 堆排序

2021-07-03 19:41:58 字數 1478 閱讀 5885

(二叉)堆資料結構是一種陣列物件,如下圖所知,他可以被視為一顆完全二叉樹。

其有如下性質:

1)對於i節點(i表示下標),其父節點為li/2」,左孩子節點為2i,右孩子節點為2i+1

2)最大堆滿足:a[parent(i)] ≥ a[i] ;最小堆滿足:a[parent(i)] ≤ a[i]

3)堆的高度為:θ(lgn)

4)子陣列元素a[ (ln/2」+1)...n]是樹中的所有葉子節點

以最大堆為例,當節點i違反了最大堆的性質,則需從節點i處「下降」以調整堆。偽**如下:

其時間複雜度為:t(n)=o(h)

根據上述性質4,對於陣列a,建堆偽**如下:

其時間複雜度為:t(n)=o(n)

偽**如下:

其時間複雜度為:t(n)=o(nlgn)

堆排序完整**如下:

[注:若有錯誤,請指正~]

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

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

演算法導論第六章 堆排序

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

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

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