最大優先佇列 演算法導論

2021-08-27 16:37:50 字數 2520 閱讀 1232

堆排序是乙個優秀的演算法,但是在實際應用中,如快速排序的效能會優於它。但是堆排序有著另外的作用,如優先佇列

與堆排序一樣,優先佇列也有兩種形式:最大優先佇列,最小優先佇列(暫且討論最大優先佇列)

優先佇列:是一種用來維護由一組元素構成的集合s的資料結果,其中的每個元素都有乙個相關的值,稱為關鍵字

最大優先佇列支援:

即:對最大優先佇列進行插入,maxheapinsert

返回最大優先佇列的最大值,heapmax

去掉最大值並且返回該值,heapextractmax

將第x個元素的值改為k,其中k>=x的原來的值,heapincreasekey

總之,即是在堆排序的基礎上進行操作:

返回最大值

去掉最大值並且返回該值:

將第x個元素的值改為k,其中k>=x的原來的值:

最後還有乙個插入

void maxheapify(int a, int length, int i) //維護

if (right <= length && a[largest] < a[right]) //右孩子最大

if (i != largest) //最大值不是父節點

}void buildmaxheap(int a, int length) //建堆

cout<

for(int i = 1; i <= length; i++)

cout<= 2;)

}int heapmax(int a)

int heapextractmax(int a, int &length)

int max = a[1];

a[1] = a[length];

length--;

maxheapify(a, length, 1);

cout<

for(int i = 1; i <= length; i++)

cout<=i的關鍵字值)

a[i] = key;

while(i > 1 && a[i / 2] < a[i]) //插入值的父節點小於該值,更新

輸出結果分析

第一行buildmaxheap(a, length);是對初始資料進行建堆的情況(int a = 中的a[0]元素只做填充效果);

第二行int max = heapmax(a); cout

三、四行:max = heapextractmax(a, length);cout去掉最大值,輸出此時的建堆情況,然後返回最大值並輸出;

第五行heapincreacekey(a, i, key, length);//改變關鍵值,將第i個元素的值改為key,預設是key>=a[i],輸出此時建堆情況;

第六行maxheapinsert(a, 16, length);對最大優先佇列插入值,重新建堆,輸出;

第七行heapsort(a, length); show(a, length);進行排序,並輸出結果;

o(∩_∩)o

演算法導論 優先佇列

堆的應用 優先佇列。什麼是優先佇列?優先佇列是一種從來維護一組由元素構成的集合s的資料結構,其中每乙個元素都乙個值,被稱為關鍵字。優先佇列可以用堆來實現。優先佇列可以分為最大優先佇列 最小優先佇列。最大優先佇列支援的操作有 1.insert 2.maximum 3.extract max 4.inc...

演算法導論 堆排序 優先佇列

二叉堆是乙個陣列,可以被看做乙個近似的完全二叉樹。性質 建堆 可以使用自底向上的方法利用過程maxheapify 向下調整堆 把陣列a 1 n 轉換為堆。偽 向下調整堆maxheapify 偽 演算法描述 3.向上調整堆 向上調整堆 private void adjustup int a,int i...

演算法導論 優先佇列(基於堆排序)

include includeusing namespace std define length 10 void maxheapify int num,int i,int len 堆調整 void buildheap int num,int len 建立初始最大隊 int heapsort int ...