优先队列

来源:互联网 发布:wifi满信号网络特别慢 编辑:程序博客网 时间:2024/06/06 04:06

一、基于堆的优先队列:

public class MaxPQ<Key extends Comparable<Key>>{private int N = 0;private Key[] pq;public MaxPQ(int maxN){pq = (Key[])new Comparable[maxN+1];}public boolean isEmpty(){return N == 0;}public int size(){return N;}public void insert(Key v){pq[++N] = v;swim(N);}public Key delMax(){Key max = pq[1];exch(1, N--);pq[N + 1] = null;sink(1);return max;}private boolean less(int i, int j){return pq[i].compareTo(pq[j]) < 0;}private void exch(int i, int j){Key t = pq[i];pq[i] = pq[j];pq[j] = t;return;}private void swim(int k){while (k > 1 && less(k/2,k)){exch(k, k/2);k = k/2;}}private void sink(int k){while (2*k <= N){int j = 2 * k;if (j < N && less(j, j + 1)) j++;if (!less(k, j)) break;exch(k,j);k = j;}}}


0 0
原创粉丝点击