Java heap的实现 最小堆的实现 代码简洁
2014-02-18 10:25
344 查看
public class HeapMin { private int[] Heap; private int maxsize; private int size; public HeapMin(int max) { maxsize = max; Heap = new int[maxsize]; size = 0; Heap[0] = Integer.MIN_VALUE; } private int leftchild(int pos) { return 2 * pos; } private int rightchild(int pos) { return 2 * pos + 1; } private int parent(int pos) { return pos / 2; } private boolean isleaf(int pos) { return ((pos > size / 2) && (pos <= size)); } private void swap(int pos1, int pos2) { int tmp; tmp = Heap[pos1]; Heap[pos1] = Heap[pos2]; Heap[pos2] = tmp; } public void insert(int elem) { size++; Heap[size] = elem; int current = size; while (Heap[current] < Heap[parent(current)]) { swap(current, parent(current)); current = parent(current); } } public void print() { int i; for (i = 1; i <= size; i++) System.out.print(Heap[i] + " "); System.out.println(); } public int removemin() { swap(1, size); size--; if (size != 0) pushdown(1); return Heap[size + 1]; } private void pushdown(int position) { int smallestchild; while (!isleaf(position)) { smallestchild = leftchild(position); if ((smallestchild < size) && (Heap[smallestchild] > Heap[smallestchild + 1])) smallestchild = smallestchild + 1; if (Heap[position] <= Heap[smallestchild]) return; swap(position, smallestchild); position = smallestchild; } } public static void main(String args[]) { HeapMin hm = new HeapMin(6); hm.insert(1); hm.insert(30); hm.insert(50); hm.insert(20); hm.insert(70); hm.print(); } }
insert函数包含了ShiftUp的过程。pushDown就是ShiftDown的过程。
要变成最大堆,只需要修改这两个过程的大于小于
来源:http://wenwen.soso.com/z/q278758109.htm
相关文章推荐
- [改善Java代码]用枚举实现工厂方法模式更简洁
- Java实现堆排序(Heapsort)实例代码
- lombok-实现java代码简洁化
- java实现汉字取拼音首字母--尝试着贴些简洁的对大家可能有用的代码 推荐
- HeapSort堆排序Java实现图文代码详解
- Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
- Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
- Prim最小生成树的最小堆的java代码实现
- 【Java学习笔记之十三】初探Java面向对象的过程及代码实现
- [置顶] 中缀表达式转成后缀表达式(含java实现的具体代码)
- 算法-java代码实现基数排序
- Java常用的八种排序算法与代码实现
- Java的常见排序之代码实现。
- Java 快速排序(QuickSort)原理及实现代码
- Java实现一个简单的定时器代码解析
- java实现html代码导出成excel
- 抢红包的红包生成算法Java实现代码
- Fresco动态设置加载特效[Java代码实现XML效果]GenericDraweeHierarchy
- java tree 树的代码实现
- java只要一句代码,实现多种方式解决图片压缩、旋转,裁切,加水印的问题