最小堆的JAVA实现
来源:互联网 发布:如何评价沈光远 知乎 编辑:程序博客网 时间:2024/05/16 01:01
package sunbufu.sort;/** * 堆排序 * * 0 * 1 2 * 3 4 5 6 * * 在二叉树中: * 因为 * 根节点下标=左节点下标-1/2 * 根节点下标=右节点下标-2/2 * 所以 * 左节点下标=根节点下标*2+1 * 右节点下标=根节点下标*2+2 * * @author 孙不服 * */public class HeapSort { public static void main(String[] args) { HeapSort heapSort = new HeapSort(); int[] data = { 3, 5, 8, 9, 1, 2 }; heapSort.data = data; heapSort.buildHeap(); for (int i = 0; i < data.length; i++) { System.out.print(data[0] + ","); data[0] = Integer.MAX_VALUE; heapSort.buildHeap(); } } public int[] data; /** * 将数组转换成最小堆 */ public void buildHeap() { // 完全二叉树只有数组下标小于或等于 (data.length) / 2 - 1 的元素有孩子结点,遍历这些结点。 for (int i = (data.length) / 2 - 1; i >= 0; i--) { // 对有孩子结点的元素heapify heapify(i); } } /** * 让i元素下降到合适的位置 * @param i */ private void heapify(int i) { // 获取左右结点的数组下标 int l = left(i); int r = right(i); // 这是一个临时变量,表示 根结点、左结点、右结点中最小的值的结点的下标 int smallest = i; // 存在左结点,且左结点的值小于根结点的值 if (l < data.length && data[l] < data[i]) smallest = l; // 存在右结点,且右结点的值小于以上比较的较小值 if (r < data.length && data[r] < data[smallest]) smallest = r; // 左右结点的值都大于根节点,直接return,不做任何操作 if (i == smallest) return; // 交换根节点和左右结点中最小的那个值,把根节点的值替换下去 swap(i, smallest); // 由于替换后左右子树会被影响,所以要对受影响的子树再进行heapify heapify(smallest); } /** * 获取根节点的左节点 * @param i * @return */ private int left(int i) { return i * 2 + 2; } /** * 获取根节点的右节点 * @param i * @return */ private int right(int i) { return i * 2 + 1; } /** * 交换数组下表为a跟b的位置 * * @param a * @param b */ public void swap(int a, int b) { int temp = data[a]; data[a] = data[b]; data[b] = temp; } /** * 打印堆 */ public void printHeap() { for (int i : data) { System.out.print(i + ", "); } System.out.println(); }}
0 0
- 最小堆的java实现
- 最小堆的JAVA实现
- 最小堆的Java实现
- Java最小堆实现
- 最小堆和最大堆的JAVA实现
- Java实现的堆排序(最小堆)
- 最小堆的实现
- 最小堆的实现
- 最小堆的实现
- Java heap的实现 最小堆的实现 代码简洁
- 最小堆&&最大堆的实现(c++)
- 最小堆&&最大堆的实现(c++)
- 最小堆与最大堆的实现
- 最小堆&&最大堆的实现(c++)
- 最大堆与最小堆的实现
- 最小堆的C++实现
- 最小-最大堆的实现
- 最小堆定时器的实现
- tensorflow 实现卷及神经网络(5.2)
- 关于个人网站创建和部署学习
- JavaScript学习-值类型
- 线段树
- HIBERNATE
- 最小堆的JAVA实现
- 接口的应用
- synchronized和lock比对
- Android 6.0的权限管理机制
- 一夜醒来,惊闻多城楼市限购!国研中心专家:这是没有办法的办法
- JavaScript学习-变量
- HDU 4857-逃生(反向拓扑排序-按条件排序)
- python包开发学习
- 字符串逆序