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

2021-08-17 03:41:11 字數 1021 閱讀 3832

#include#includeusing namespace std;

#define length 10

void maxheapify(int num, int i, int len);//堆調整

void buildheap(int num, int len);//建立初始最大隊

int heapsort(int num, int len);//堆排序

int heapextractmax(int num, int len);//優先佇列 利用堆排序

void heapincreasekey(int num, int i, int key);//增大堆中指定位置的關鍵字的值

void output(int num, int len);

int main ()

; buildheap(num, length);

cout << "初始堆:" <0 && num[i / 2] < num[i]) //i/2代表的是i的雙親結點 因為本函式是進行關鍵只增加的操作 因此只需要逐級向上比較 }

int heapextractmax(int num, int len)

//堆排序的關鍵是一定要搞清楚len 在每個函式中的不同值 是長度還是下標

int heapsort(int num, int len)//此處的len代表的是實際長度

}//buildheap只是用一次 即構建初始堆 因為之後的對調整函式需要在初始堆的基礎上進行操作

void buildheap(int num, int len)//建堆 len是長度 利用給定的陣列num

//for迴圈結束後 就構建好了初始堆

}//這個函式的作用是調整堆

void maxheapify(int num, int i, int len)//見圖heapsort

} void output(int num, int len)

cout << endl;

}

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

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

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

時間複雜度 o nlgn 空間複雜度 具有空間原址性,即o n 表示堆的陣列包括兩個屬性 length是陣列的長度,heap size是堆的大小,某些操作要求某些資料不在堆中 把陣列建成乙個最大堆,就能利用堆實現最大優先佇列了 include using namespace std define p...

優先佇列 堆排序

一種支援刪除最大元素和插入元素兩種操作的資料結構叫做優先佇列。實現棧or佇列與實現優先佇列的最大不同在於效能的要求。對於棧和佇列,我們實現能在常數時間完成所有操作 而優先佇列,插入元素和刪除最大元素這兩個操作在最壞情況下需要線性時間完成 優先佇列的各種實現在在最壞情況下執行時間的增長數量級 資料結構...