publicclassMaxPriorityQueue<T extendsComparable<T>>{private T items[];privateint size;publicMaxPriorityQueue(int capacity){this.items =(T[])newComparable[capacity+1];this.size =0;}publicintsize(){return size;}publicbooleanisEmpty(){return size ==0;}publicbooleanless(int i,int k){return items[i].compareTo(items[k])<0;}publicvoidexchange(int i,int k){
T tmp = items[i];
items[i]= items[k];
items[k]= tmp;}publicvoidinsert(T value){
items[++size]= value;swim(size);}//上浮privatevoidswim(int k){while(k >1){if(less(k/2, k)){exchange(k/2, k);}
k /=2;}}public T delMax(){
T max = items[1];exchange(1, size);
items[size]= null;
size--;sink(1);return max;}//下沉privatevoidsink(int k){while(2*k<=size){int max =0;if(2*k+1<= size){if(less(2*k,2*k+1)){
max =2*k+1;}else{
max =2*k;}}else{
max =2*k;}if(!less(k,max))break;exchange(k,max);
k = max;}}}
最小优先队列
publicclassMinPriorityQueue<T extendsComparable<T>>{private T items[];privateint size;publicMinPriorityQueue(int capacity){this.items =(T[])newComparable[capacity+1];this.size =0;}publicintsize(){return size;}publicbooleanisEmpty(){return size ==0;}publicbooleanless(int i,int k){return items[i].compareTo(items[k])<0;}publicvoidexchange(int i,int k){
T tmp = items[i];
items[i]= items[k];
items[k]= tmp;}publicvoidinsert(T value){
items[++size]= value;swim(size);}privatevoidswim(int k){while(k >1){if(!less(k/2, k)){exchange(k/2,k);}
k /=2;}}public T delMin(){
T min = items[1];exchange(1, size);
items[size]= null;
size--;sink(1);return min;}publicvoidsink(int k){while(2*k<=size){int min =0;if(2*k+1<=size){if(less(2*k,2*k+1)){
min =2*k;}else{
min =2*k+1;}}else{
min =2*k;}if(less(k,min))break;exchange(k,min);
k = min;}}}