堆排序
来源:互联网 发布:vs 编程最佳字体 编辑:程序博客网 时间:2024/06/02 05:23
下标从0开始,建堆(向下调整),采用递归,用二叉树的后序遍历。
import java.util.Arrays;public class HeapSort { public static void minHeap(int[] array, int index, int heapSize) { // 下标从0开始,故左孩子2i+1,右孩子2i+2 int left = index * 2 + 1; int right = index * 2 + 2; // 找出左右孩子中的较小者 int min = index; if (left < heapSize && array[left] < array[min]) { min = left; } if (right < heapSize && array[right] < array[min]) { min = right; } // 替换父节点和较小者 if (index != min) { swap(array, index, min); minHeap(array, min, heapSize); } } public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void heapSort(int[] arr) { // 建堆 for (int i = (arr.length - 1) / 2; i >= 0; i--) { minHeap(arr, i, arr.length); } // 首尾交换,再次建堆 for (int i = arr.length - 1; i > 0; i--) { swap(arr, 0, i); minHeap(arr, 0, i); } } public static void main(String[] args) { int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 }; heapSort(nums); System.out.println(Arrays.toString(nums)); }}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 反转整形数
- JVM之GC详解
- 2017Q4 / NOIPuji 2017 赛后总结
- Android 8.0后台执行限制
- 11.5模拟赛总结
- 堆排序
- Master of Phi(2017CCPC杭州站现场赛B题)(dfs)
- 多态
- 二进制枚举子集
- 贪心算法解决汽车加油问题
- 递归和非递归分别实现strlen
- VM下的linux虚拟机ifconfig没有IP
- 尘埃落定-校招求职历程
- ionic3开发系列——如何导入自定义资源图标库