第六章堆排序之「最小優先順序佇列」(練習6 5 3)

2021-06-02 23:23:43 字數 912 閱讀 2303

用最小堆實現最小優先順序佇列:

//返回堆中關鍵字最小的元素

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