// 删除堆中最小的元素并返回这个最大的元素 public T delMim() { Tmin= data[1]; exch(1, minPriorityQueueLength); minPriorityQueueLength--; sink(1); return min; }
// 使用上浮算法,使索引k处的元素能在堆中处于一个正确的位置 privatevoidswim(int k) { while (k>1) { if (less(k, k/2)) { exch(k, k/2); }
k = k/2; } }
// 使用下沉算法,使索引k处的元素能在堆中处于一个正确的位置 privatevoidsink(int k) { while (2*k<=minPriorityQueueLength) { int min; if (2*k+1<=minPriorityQueueLength) { if (less(2*k, 2*k+1)) { min = 2*k; } else { min = 2*k+1; } } else { min = 2*k; }