java 堆排序
来源:互联网 发布:淘宝客推广平台靠谱吗 编辑:程序博客网 时间:2024/06/06 08:34
public static void main(String[] args) { //数组我们从下标0开始计算,那么就满足规则:节点i的左子结点:2i+1,右子节点:2i+2 //节点i的父节点为:(i-1)/2 int[] a = {3,2,5,4,6,7,8,9,2,0,5,3,1,6,7,8,4,3}; heapSort(a); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } /** * 堆排序 * @param a 源数组 */ public static void heapSort(int[] a) { //a.length-1为最后一个节点的编号,再减去1然后除以2就得到最后一个节点的父节点 int n = (a.length-1-1) / 2; //构建初始堆 for (int i = n; i >= 0; i--) { rebuild(a, i, a.length - 1); } for (int i = a.length - 1; i >= 1; i--) { int tmp = a[0]; a[0] = a[i]; a[i] = tmp; rebuild(a, 0, i - 1); } } /** * 重建堆 * @param a 源数组 * @param k 当前节点 * @param end 最大可用节点编号 */ public static void rebuild(int[] a, int k, int end) { int i = k, j = 2 * k + 1; int temp = a[k]; while (j <= end) { if (j < end && a[j] < a[j+1]) { // 如果j=a.length-1的话就没有右子节点了 j++; } if (temp < a[j]) { a[i] = a[j]; i = j; j = 2 * j + 1; } else { break; } } a[i] = temp; }
0 0
- java排序 -- 堆排序
- Java堆排序算法
- 堆排序(java)
- Java 堆排序算法
- JAVA 堆排序
- 堆排序Java代码
- java 堆排序
- 堆排序Java实现
- java堆排序
- 堆排序(JAVA)
- 堆排序-java实现
- JAVA堆排序
- java 堆排序
- 堆排序 Java实现
- 堆排序 java
- java 堆排序
- Java堆排序
- java堆排序
- 如何在面试中发现优秀程序员(转)
- 软考-活动图+时序图+用例图
- 提高工作效率的一些方法
- 救火必备linux命令小结(一)------查问题
- 运维人员必须熟悉的运维工具汇总
- java 堆排序
- 学习记录,不断更新
- 107. 987654321 problem
- Mysql-SQL优化-统计某种类型的个数
- 数据结构-多项式
- JDK中的设计模式
- BadImageFormatException : Could not load file or assembly or one of its dependencies.
- OpenCV入门(二十一)-- 绘制彩色图像的直方图
- Windows7 64 VS2010/2012 去掉VMware菜单