/** * fix up. */ private void swim(int k) { while (k > 1 && less(k, (k + d - 2) / d)) { swap(k, (k + d - 2) / d); k = (k + d - 2) / d; } }
/** * Removes and returns the index of item with minimum value (highest priority). */ public int poll() { swap(1, n); sink(1, n - 1); return pq[n--]; }
/** * fix down. */ private void sink(int k, int N) { int j; while ((j = d * (k - 1) + 2) <= N) { for (int i = j + 1; i < j + d && i <= N; i++) { if (less(i, j)) { j = i; } } if (!(less(j, k))) { break; } swap(k, j); k = j; } }