堆排序 最大優先順序佇列

2022-07-29 07:30:15 字數 2077 閱讀 8148

/*

* author: bigballon

* note: max_priority_queue

* date: 2013.11.21 */

一篇好文章:

#include

using

namespace

std;

void my_swap(int& x, int&y)

void max_heapify(int* a, int i, int

len)

}void build_max_heap(int* a, int

len)

void heap_sort(int* a,int

len)

}int heap_max(int*a)

int heap_extract_max(int* a,int&len)

int max = a[1

]; a[

1] =a[len];

len--;

max_heapify(a,

1,len);

return

max;

}void heap_increase_key(int* a, int i, int

key)

a[i] =key;

while(i > 1 && a[i>>1] }void max_heap_insert(int* a,int key,int&len)

void printarray(int *a, int

size)

intmain()

;

//區別len 和 heapsize

//heapsize是堆的大小,而len是初始陣列的總大小。

len = heapsize = 12

;

//首先建堆

build_max_heap(arr, len);

cout

<< "

建堆後:

"

//使用heapmaximum

cout << "

當前最大的元素是:

"

<< heap_max(arr) << endl

cout << "

使用heapextractmax後:

"

printarray(arr, heapsize);

//再次使用heapextractmax

cout << "

再次使用heapextractmax後:

"

printarray(arr, heapsize);

//使用heapincreasekey

cout << "

使用heapincreasekey後:

"

2, 15

); printarray(arr, heapsize);

//使用maxheapinsert

cout << "

使用maxheapinsert後:

"

28, heapsize);

printarray(arr, heapsize);}/*

什麼是最大優先順序佇列

它不是一種普通的先進先出佇列(佇列是什麼?天啊!),它維護的元素有個優先順序屬性,

不管如何進佇列,出列隊的都是優先順序最大的元素!

應用在**

計算機的分時排程啊

最小生成樹的prim演算法

...操作有:

insert(s,x):將元素x插入到集合s

maximum(s):返回s中具有最大關鍵字的元素

extract-max(s):去掉並返回s中的具有最大關鍵字的元素

increase-key(s,x,k):將元素x的關鍵字的值增到k,這裡k值不能小於x的原關鍵字的值

*/

堆排序和優先順序佇列

堆排序和優先順序佇列 堆排序 和合併排序一樣,時間複雜度為o nlgn 同時和插入排序一樣,在原序列中進行 這樣堆排序集合了合併排序和插入排序的優點。堆排序的另乙個特點是利用了 堆 這種資料結構.堆資料結構還不止在堆排序中有用,還可以構成乙個有效的優先佇列.堆 是一種資料結構,也是一種陣列物件,如圖...

堆排序和優先順序佇列priority queue

堆 堆是完全二叉樹,便於用array來儲存堆的所有節點 堆儲存在下標為0開始計數的陣列中,因此在堆中給定下標為i的結點時 如果i 0 結點i是根節點,沒有雙親節點 否則結點i的雙親結點為結點 i 1 2。如果2 i 1 n 1 則結點i無左孩子,否則結點i的左孩子為結點2 i 1。如果2 i 2 n...

堆排序 最大優先佇列

優先佇列支援的操作 insert maximum,extract,increasekey,include include include define number 100 define num 6 using namespace std struct heaptype void exchange ...