第六章 堆排序 C

2021-07-02 04:34:54 字數 1227 閱讀 2535

二叉堆:是乙個陣列,可以看成乙個近似的完全二叉樹。除了最低層,該樹是完全滿的。有兩種形式:最大堆和最小堆。

堆的兩個用途:排序和優先佇列。

排序:若要按公升序排列,則使用最大堆。

有限佇列:在計算機作業排程中一般使用最大堆,在基於事件驅動的模擬器中使用最小堆。

堆的常用操作為:

max_heapify (a,i)  此操作用來維護堆的性質。

build-heap(a)  次操作用來把乙個陣列轉為最大堆。

堆排序演算法:

heapsort(a)

build-heap(a)  

for i = a.length dowto 2

swap a[1]  with  a[i]

a.heapsize  = a.heapsize - 1

maxheapify(a,i)

書上的練習題6.1.1  到 6.3.3  使用了堆的很多性質,有時間可以在做一下,有助於對堆的深入理解。

下面附上源**和結果圖:

第六章 堆排序

首先是構造最大堆 最小堆,排序結果剛好相反具體有一些改動 書中證明了從第n 2開始即可構造出最大堆 void max heap int a,int i else if r heap size a r a largest if largest i void build max heap int a 然...

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

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

演算法導論 第六章 堆排序

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