优先级队列的基本实现(大堆)
public class ProiorityQueue {
private int[] array = new int[10];
private int size = 0;
private void adjustUp(){
int index = size;
while (index != 0){
int parent = (index-1) / 2;
if (array[index] <= array[parent]){
break;
}else {
swap(parent, index);
index = parent;
}
}
}
private void swap(int parent, int index) {
int num = array[parent];
array[parent] = array[index];
array[index] = num;
}
public void put(int val){
if(size == array.length){
throw new RuntimeException("堆满");
}
array[size] = val;
adjustUp();
size++;
}
public int take(){
if(size == 0){
throw new RuntimeException("堆空");
}
int val = array[0];
array[0] = array[size-1];
size--;
adjustDown();
return val;
}
private void adjustDown() {
int index = 0;
while (2 * index +1 < size){
int max = 2 * index + 1;
if(max + 1 < size && array[max] < array[max+1]){
max++;
}
if(array[index] < array[max]){
swap(index, max);
index = max;
}else {
break;
}
}
}
}