用最小堆實現最小優先順序佇列:
//返回堆中關鍵字最小的元素
heapminimum()
//去掉並返回堆中關鍵字最小的元素
heapextractmin()
//將堆中元素x的關鍵字減小到k,k要小於x原來的關鍵字值
heapdecreasekey()
//將元素x插入到堆中
minheapinsert()
#include #include #include #define buffer_size 10
//堆調整,保持堆的性質
void minheapify(int *a,int i,int heapsize)
if(right<=heapsize&&a[smallest]>a[right])
if(smallest!=i)
else
}}//建堆
void buildminheap(int *a,int heapsize)
} //返回堆中具有最小關鍵字的元素
int heapminimum(int *a)
//去掉並返回堆中具有最小關鍵字的元素
int heapextractmin(int *a,int *heapsize)
//將堆中元素x的關鍵字值減小到k,k要小於x原關鍵字的值
void heapdecreasekey(int *a,int x,int k)
a[x]=k;
while(x>1&&a[x]>1]) }
//把元素x插入堆中
void minheapinsert(int *a,int x,int *heapsize)
//輸出堆中的元素
void output(int *a,int len)
{ int i=0;
for(i=1;i
演算法導論 第六章 再談 堆排序和最大優先順序佇列
摘自書本 這一部分將要給出幾個解決以下排序問題的演算法 輸入 n 個數的序列 a1,a2,an 輸出 輸入序列的乙個重排 a1 a2 an 使 a1 a2 an 輸入序列通常是乙個 n 元 陣列,但也可能由其他形式來表示,如鍊表。輸入資料的結構 在實際中,待排序的數很少是孤立的值,他們通常是乙個稱為...
第六章 堆排序
首先是構造最大堆 最小堆,排序結果剛好相反具體有一些改動 書中證明了從第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 然...
第六章 堆排序 C
二叉堆 是乙個陣列,可以看成乙個近似的完全二叉樹。除了最低層,該樹是完全滿的。有兩種形式 最大堆和最小堆。堆的兩個用途 排序和優先佇列。排序 若要按公升序排列,則使用最大堆。有限佇列 在計算機作業排程中一般使用最大堆,在基於事件驅動的模擬器中使用最小堆。堆的常用操作為 max heapify a,i...