优先队列 算法导论 java语言
2015-03-16 17:41
731 查看
<pre name="code" class="java">public class PriorityQueue { private int heapsize=0; public final static int MIN=-10000; private final static int CAPACITY = 16; private int[] quene = new int[CAPACITY]; public static void main(String[] args) { PriorityQueue q = new PriorityQueue(); System.out.println("插入2 6 3 8 7 9 1 10 9!"); q.insert(2); q.insert(6); q.insert(3); q.insert(8); q.insert(7); q.insert(9); q.insert(1); q.insert(10); q.insert(9); System.out.println("最大值:"+q.getMaximum()); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("插入9 1 10!"); q.insert(9); q.insert(1); q.insert(10); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); } public int getMaximum() { return quene[0]; } public int extractMax() { if(heapsize < 1) { System.err.println("heap underflow!"); } int max = quene[0]; quene[0] = quene[heapsize-1]; heapsize--; maxHeapify(0); return max; } public void insert(int key) { heapsize++; quene[heapsize-1] = MIN; increaseKey(heapsize-1,key); } private void increaseKey(int i,int key) { if(key < quene[i]) { System.err.println("new key is smaller than current key"); } quene[i]=key; while(i>0 && quene[parent(i)]<quene[i]) { exchange(i,parent(i)); i=parent(i); } } private void exchange(int i, int j) { int temp = quene[i]; quene[i] = quene[j]; quene[j] = temp; } private void maxHeapify( int i) { int largest=0; int l = Left(i); int r = Right(i); if(l < heapsize && quene[l] > quene[i]) { largest = l; } else { largest = i; } if(r < heapsize && quene[r] > quene[largest]) { largest = r; } if(largest != i) { exchange(i,largest); maxHeapify(largest); } } private int parent(int i) { return (i-1)/2; } private int Right(int i) { return (2*i+2); } private int Left(int i) { return (2*i+1); } }
运行结果为:
插入2 6 3 8 7 9 1 10 9! 最大值:10 最大值:10取出 最大值:9取出 插入9 1 10! 最大值:10取出 最大值:9取出 最大值:9取出 最大值:8取出
q.insert(1);
相关文章推荐
- 算法导论——lec 12 平摊分析与优先队列
- 算法(第四版)笔记<一>-------动态队列的数组实现(Java语言)
- 最大优先队列--【算法导论】
- 算法导论——lec 12 平摊分析与优先队列
- Dijkstra 算法用优先队列的java实现
- 算法导论之堆的应用---优先队列
- 关于 优先队列(C语言) ——(参考算法导论)
- 基于算法导论6.5用最大堆实现的优先队列(C++)
- (数据结构与算法分析 七)------优先队列中的二叉堆的实现( Java语言描述)
- JAVA拾遗 - 优先队列的探讨以及其在KNN算法中的应用
- 算法(第四版)学习笔记之java实现基于堆的优先队列
- 数据结构与算法(4)---Java语言实现:队列的单链表定义
- 优先队列的实现 Java数据结构与算法
- 关于 队列(C语言) ——(参考算法导论)
- 使用数组实现栈和循环队列(JAVA语言)
- 算法入门--最大堆实现优先队列
- 算法导论10.1-6习题解答(用两个栈实现一个队列)
- java_实现先来先服务(FCFS)短作业优先算法(SJF)