堆排序java语言描述
堆排序综合了插入排序和合并排序的优点。堆排序的运行时间为O(nlgn),并且是原地排序(像插入排序一样,在同一数组内排序)。
这里用到了一种堆数据结构,堆二叉树又叫二叉堆,分为两种:最大堆和最小堆。在最大堆中,最大堆特性是指除了根以外的每个节点
i,有
array[parent[i]] >= array[i];
最小堆相反。
建堆只需要一次,以后每次只需要维持根的最大堆性质就可以了,交换首尾值。
下面采用最大堆排序进行数组排序(也可以采用最小堆排序方法),用的的性质就是最大堆的根总是这个堆的最大值。
package com.chengmaoning.heapsort;public class HeapSort {// 维持最大堆性质。这里用了递归的方法,也可以采取循环的方式private void max_heapify(int[] nums, int start, int end) {int left = 2 * start + 1;int right = 2 * start + 2;int largest = start;if (left <= end && nums[left] > nums[start]) {largest = left;}if (right <= end && nums[right] > nums[largest]) {largest = right;}if (largest != start) {swap(nums, start, largest);max_heapify(nums, largest, end);}}/*** 堆排序* * @param nums*/private void heap_sort(int[] nums) {build_max_heap(nums); // 先建堆for (int i = 0; i < nums.length; i++) {int end = nums.length - 1 - i;swap(nums, 0, end); // 把找到的最大值与末尾值互换max_heapify(nums, 0, end - 1); // 以后每次维持以下标0的根的树为最大堆即可}}// 建堆private void build_max_heap(int[] nums) {// TODO Auto-generated method stubfor (int i = nums.length / 2; i >= 0; --i) {max_heapify(nums, i, nums.length - 1);}}/*** * @param nums* @param i* @param j*/private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubint[] nums = { 2, 40, 3, 9, 0, 3, 4, 5, 8, 34, 5, 3, 07, 9, 7, 2, 93,4, 8, 9, 3, 11, 4, 7 };HeapSort tester = new HeapSort();tester.heap_sort(nums);// tester.build_max_heap(nums);for (int i = 0; i < nums.length; i++) {System.out.print(nums[i] + " ");}}}
堆排序java语言描述相关推荐
- s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...
<数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一JI2.3 抛出异常
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一2.2.1 可变大小数组
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timo ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一2.1.4 让实现安全
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timoth ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一练习
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...
- 《数据结构与抽象:Java语言描述(原书第4版)》一P.4.1 标识类
本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第1章 ,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. H ...
- 到天宫做客(洛谷P1178题题解,Java语言描述)
题目要求 题目链接 分析 早期代码大概是这么写的,先是用了Date,结果连样例都过不去,就换了日期数组自己做,还是不对. import java.util.*;public class Main {p ...
- 高手追小萝莉的故事(洛谷P1184题题解,Java语言描述)
题目要求 题目链接 分析 吐槽: 无时无刻都要跟着?这还追个锤子? 数据点1是:第一行1 1:第2行WC:第三行WC:追到女厕所-- 数据换行问题和空格问题真的恶心!!! 好了这个题,其实就用一个便于 ...
- 路径计数2(洛谷P1176题题解,Java语言描述)
题目要求 题目链接 分析 我的思路很简单,因为这个题所有的点都是(1,1)(1,1)(1,1)开始的,所以直接把数组多开一个边,开一个[n+1][n+1]的数组就行了. 初始化f[1][1]=1f[1 ...
最新文章
- Linux的三种特殊权限
- 数据结构+算法面试100题~~~摘自CSDN,作者July
- php 计算代码执行时间
- 机器学习之数据集划分——训练集测试集划分,划分函数,估计器的使用
- 【maven】 在 MyEcplise上使用maven搭建Web项目
- ctr 平滑_CTR预估中的贝叶斯平滑方法及其代码实现
- bootstrap菜单展开收起_基于bootstrap的后台左侧导航菜单和点击二级菜单刷新二级页面时候菜单展开显示当前菜单...
- Python之网络编程(TCP套接字与UDP套接字)
- IBatisNet 升级到 .Net Framework 4.0 时发现 IBatisNet 一小BUG
- Object.keys()返回对象自身可枚举属性组成的数组
- .htaccess更改目录下的默认主页
- Python+selenium+eclipse执行web自动化(四)控件处理
- Android Studio gradle 自定义签名设置
- c语言数据类型转换规律,c语言,数据类型转换
- 对称、群论与魔术(一)——对称性本质探索
- FRM 风险管理基础:复习提纲二
- 人才测评之计划能力,如何提高计划能力?
- 总结一下强大的ES6符号
- 普通u盘linux不识别,Linux识别不了u盘怎么办
- 望尽天涯路之从理财角度看高可用