堆實現的優先順序佇列的主要方法說明:
(1)heap_maximum(int a) 返回中具有最大關鍵字的元素
(2)heap_extract_max(int a) 去掉並返回具有最大關鍵字的元素
(3)heap_increase_key(int a,int i,int k) 將第i個元素的關鍵字值增加到k,k不能小於x的原關鍵字的值
(4)max_heap_insert(int a,int k) 插入關鍵字值為k的新元素
正確理解a.length和heap_size:
a.length是陣列元素中元素的個數,heap_size是存放在a中堆的元素個數。就是說雖然a[0,a.length-1]中都可以包含有效值,但a[heap_size-1] 後的元素都不屬於相應的堆,
此處heap_size <= a.length
注:這句話是摘自演算法導論,**也是按演算法導論實現的。這裡博主為了省事,沒用可變長度陣列,所以直接執行max_heap_insert方法是會報錯的,所以得先返回
並刪除乙個最大值,也就是先呼叫一次
heap_extract_max
注2:按照這程式執行的第三個輸出為:
14 8 10 4 7 9 3 2 1 1
最後的數字1並不是堆中的,這點已經在「正確理解a.length和heap_size」這部分解釋過了,希望能好好理解
package zsy.com;
public class heapsortmethod
system.out.println(" ");
max_heap_insert(a, 15);
for(int i:a)
}public static void max_heapify(int a,int i)else
if(r < heap_size && a[largest] < a[r])
if(largest!=i)
} public static void build_max_heap(int a)
} public static void swap(int a,int i,int j)
//............................................
public static int heap_maximum(int a)
public static int heap_extract_max(int a)
public static void heap_increase_key(int a,int i,int k) }
public static void max_heap_insert(int a,int k)
}
優先順序佇列(堆實現)
一 優先順序佇列定義 二 方法實現 獲得最大元素方法 去掉最大元素方法 修改優先順序方法 新增節點 三 實現 用堆實現乙個優先順序佇列 主要是新增 修改 刪除節點 節點具有唯一性 author hhf 2014年11月28日 public class priorityqueue 返回優先佇列中優先順...
優先順序佇列(堆實現)
優先順序佇列 概念 一般來說我們會根據事情的重要程度優先處理某事,比如完成學習任務和刷微博,我們會認為完成學習任務比較重要,因此會先執行它,因此在這種情況下,資料結構就應提供兩個基本的操作,一是返回最高優先順序物件,二是新增新的物件,這種資料結構就叫做優先順序佇列。二叉樹的順序儲存 儲存方式 使用陣...
堆(優先順序佇列)
c 的 stl 中提供了 優先佇列 這一容器,它和普通的 fifo 佇列都定義在 中,有 push 和 pop 過程,分別表示 往佇列裡加入新元素 和 從佇列裡刪除隊首元素 唯一的區別是,在優先佇列中,元素並不是按照進入佇列的先後順序排列,而是按照優先順序的高低順序排列 換句話說,pop 刪除的是優...