這一章,前言講了為什麼要排序?
接著介紹本章主題,堆排序。
那麼什麼又是堆呢?
一種資料結構,當然有很多性質,這個我在前面資料結構說過了,然後有兩種。
1.大根堆-----它是用來堆排序的。
2.小根堆-----它是用來做優先順序佇列的。
清楚了這兩種用途,那麼我們來看**:
關於堆排序:
public class heap_sort
} private static void perdown(int a,int i,int n)
// 去掉並返回具有最大關鍵字的元素
// 注意:這裡每次maxheapify的是heapsize
int heapextractmax(int a, int heapsize)
// 將元素a[i]的值增加到key
void heapincreasekey(int a, int i, int key) }
// 插入關鍵字為key的元素
void maxheapinsert(int a, int key, int heapsize)
}
所謂最大優先順序佇列,它支援以上4種操作。
insert()把乙個元素插入佇列
maximum()返回佇列中最大的元素
extract-max()去掉並返回現在佇列的元素
crease-key()將乙個元素增大到k時的優先順序佇列操作。
所有以上的操作,都是基於堆,這種資料結構,因為實現佇列,其實還有別的資料結構,比如說,基本的佇列,只要新增優先順序資料域。
《演算法導論》 第6章堆排序
include include using namespace std 定義結構體,其中包含陣列長alength,堆長heap size。struct dui 返回堆中元素i的父結點的下標 i 2向下取整,即i進行左移一位操作。int parent int i 返回堆中元素i的左孩子的下標 i 2 ...
演算法導論第6章 堆排序
本章開始介紹了堆的基本概念,然後引入最大堆和最小堆的概念。全章採用最大堆來介紹堆的操作,兩個重要的操作是調整最大堆和建立最大堆,接著著兩個操作引進了堆排序,最後介紹了採用堆實現優先順序佇列。1 堆 堆給人的感覺是乙個二叉樹,但是其本質是一種陣列物件,因為對堆進行操作的時候將堆視為一顆完全二叉樹,樹種...
《演算法導論》筆記 第6章 堆排序
第6章 堆排序 本章主要介紹了堆的基本知識和幾個基本操作過程 堆 二叉 堆資料結構是一種陣列物件,它可以被看作是一棵完全二叉樹。heap size a 即堆的大小是已知的,樹的根結點是a 1 某個i結點,它的父結點parent i 為,左兒子left i 和右兒子right i 的下標可以簡單地計算...