优先级队列PriorityQueue中即使用了数组+二叉堆的数据结构
实现最小堆的方法
循环查找父节点做交换 直到对比不上为止
入队 *** 作
private staticvoid siftUpComparable(int k, T x, Object[] array) { Comparable super T> key = (Comparable super T>) x; while (k > 0) { int parent = (k - 1) >>> 1; Object e = array[parent]; if (key.compareTo((T) e) >= 0) break; array[k] = e; k = parent; } array[k] = key; }
出队代码实现
private staticvoid siftDownComparable(int k, T x, Object[] array, int n) { if (n > 0) { Comparable super T> key = (Comparable super T>)x; int half = n >>> 1; // loop while a non-leaf while (k < half) { int child = (k << 1) + 1; // assume left child is least Object c = array[child]; int right = child + 1; if (right < n && ((Comparable super T>) c).compareTo((T) array[right]) > 0) c = array[child = right]; if (key.compareTo((T) c) <= 0) break; array[k] = c; k = child; } array[k] = key; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)