您的位置:首页 > 编程语言 > Java开发

优先队列 算法导论 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); 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: