java实现简单排序算法:堆排序
来源:互联网 发布:下载游戏的软件 编辑:程序博客网 时间:2024/05/21 10:46
- 构建一个大顶堆。
- 依次获取大顶堆的第一个元素,即当前未排序子序列中最大元素。
- 注意:沿关键字较大的孩子节点向下筛选,防止调换后破坏较大孩子 节点的结构(较大孩子节点大于自身左右子节点)
package SortTest;import java.util.Scanner;public class HeapSort { /** * 堆排序 * @param args */ static void HeapSort(int[] a) { int i; //构建一个大顶堆 for (i = a.length / 2; i > 0; i--) { HeapAdjust(a, i, a.length); } //依次获取大顶堆的第一个元素,即当前未排序子序列中最大元素 for (i = a.length-1; i > 0; i--) { swap(a, 0, i); //将堆顶记录与未排序的子序列的最后一个元素交换 HeapAdjust(a, 0, i - 1);//将剩下的未排序子序列再次构建大顶堆 } } private static void swap(int[] a, int i, int i2) { int temp = a[i]; a[i] = a[i2]; a[i2] = temp; } private static void HeapAdjust(int[] a, int i, int length) { int temp, j; temp = a[i]; for (j = 2 * i; j < length; j *= 2) { //沿关键字较大的孩子节点向下筛选,防止调换后破坏较大孩子节点的结构(较大孩子节点大于自身左右子节点) if (j < length && a[j] < a[j + 1]) ++j; if (temp >= a[j]) break; a[i] = a[j]; i = j; } a[i] = temp; } public static void main(String[] args) { // 读入指定长度的数组 Scanner sca = new Scanner(System.in); int count = sca.nextInt(); int[] a = new int[count]; for (int i = 0; i < count; i++) { a[i] = sca.nextInt(); } //调用排序算法 HeapSort(a); // 打印排序后的数组 for (int j = 0; j < a.length; j++) { System.out.print(a[j] + " "); } }}
0 0
- java实现简单排序算法:堆排序
- 排序算法--选择排序(简单选择排序、堆排序)java实现
- java实现排序算法之选择排序(简单选择排序和堆排序)
- 堆排序算法-java实现
- Java实现堆排序算法
- Java实现堆排序算法
- 堆排序算法java实现
- 堆排序算法--Java实现
- 堆排序算法java实现
- Java实现排序算法之堆排序
- java实现排序算法之堆排序
- Java实现排序算法2:堆排序
- 排序算法之堆排序java实现
- 排序算法之堆排序 Java 实现
- 排序算法总结(简单选择排序、堆排序)(python实现)
- Java算法排序之--简单排序、堆排序
- 简单排序Java实现(三):希尔排序,堆排序
- 算法实战java实现插入排序,堆排序,归并排序
- ubuntu14.04 为例 samba服务配置
- Android支持HTML标签
- Design下FloatingActionButton的简单使用
- 树状数组理解
- SSH框架整合的一些步骤整理(一)
- java实现简单排序算法:堆排序
- Android拍照或从图库选择图片并裁剪
- 组合模式
- equals()和hashCode()方法
- 【mark】第一次打卡,mark一下进度
- android中jsoup解析html的几个例子
- 【CNTK】CNTK学习笔记之制作自己的数据集(以MNIST手写数字数据集为例)
- 你必须知道的.NET之读书笔记
- Windows环境Mycat数据库分库分表中间件部署