堆排序之Java实现

代码:

 package cn.com.zfc.lesson21.sort;

 /**
*
* @title HeapSort
* @describe 堆排序
* @author 张富昌
* @date 2016年10月2日下午5:33:50
*/
public class HeapSort {
public static void main(String[] args) {
// 声明整型数组
int[] array = new int[10];
// 使用循环和随机数初始化数组
for (int i = 0; i < array.length; i++) {
array[i] = (int) Math.round(Math.random() * 100);
}
System.out.println("原始数组为:");
for (int i : array) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("排序后的数组为:");
for (int i : heapSort(array)) {
System.out.print(i + " ");
}
} /**
*
* 功能:堆排序的基本思想是
*
* 参数:int[] array
*
* 返回类型:int[]
*/
public static int[] heapSort(int[] array) {
int[] arr = array;
for (int i = (arr.length - 2) / 2; i >= 0; i--) {
// 将 0~[n-1]调整成大顶堆
heapAdjust(arr, i, arr.length - 1);
}
for (int i = arr.length - 1; i > 0; i--) {
// 第 i 趟排序
swap(arr, 0, i);
heapAdjust(arr, 0, i - 1);
} return arr;
} /**
*
* 功能:将待排数组调节成大顶堆,调整 arr[low],使除它以外的元素成为大顶堆
*
* 参数:int[] arr, int low, int high
*
* 返回类型:void
*/
public static void heapAdjust(int[] arr, int low, int high) {
for (int f = low, i = 2 * low + 1; i <= high; i = 2 * i + 1) {
// f 为被调整的结点,i 为 f 的最大孩子
if (i < high && arr[i] < arr[i + 1]) {
// 右孩子更大,则 i 指向右孩子
i++;
}
if (arr[f] >= arr[i]) {
// 已经成为大顶堆了
break;
}
// 交换调整结点的位置
swap(arr, f, i);
// 让 i 成为新的调整结点
f = i;
}
} /**
*
* 功能:交换两个数的值
*
* 参数:int i, int j
*
* 返回类型:void
*/
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp; }
}

运行结果:

堆排序之Java实现的更多相关文章

  1. 堆排序算法 java 实现

    堆排序算法 java 实现 白话经典算法系列之七 堆与堆排序 Java排序算法(三):堆排序 算法概念 堆排序(HeapSort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,可以利用数组的特 ...

  2. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

  3. 堆排序 思想 JAVA实现

    已知数组 79.52.48.51.49.34.21.3.26.23 ,请采用堆排序使数组有序. “什么是堆” 堆是一颗完全二叉树,N层完全二叉树是一颗,除N-1层外其节点数都达到最大,且第N层子节点全 ...

  4. 排序系列 之 堆排序算法 —— Java实现

       基本概念: 二叉堆是完全二叉树或者是近似完全二叉树. 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 一般将二叉堆简称 ...

  5. 排序算法-堆排序(Java)

    package com.rao.linkList; import java.util.Arrays; /** * @author Srao * @className HeapSort * @date ...

  6. 排序算法入门之堆排序(Java实现)

    堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序.堆排序总的运行时间为O(NlonN). 堆的概念 堆是以数组作为存储结构. 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那 ...

  7. 堆排序(java实现)

    public class Test04 { static int a[] = {9,8,7,6,5,4,3,2,1,11,12,10,19,18,17,16}; public static void ...

  8. 堆排序算法(Java实现)

    将待排序的序列构造成一个大顶堆(从大到小排要构造成小顶堆).此时,整个序列的最大值就是堆顶的根节点,将他和末尾元素交换,然后将剩余的length-1个节点序列重新构造成新的堆.重复执行,便能得到一个有 ...

  9. Java常见排序算法之堆排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

随机推荐

  1. 论攻击Web应用的常见技术

    攻击目标: 应用HTTP协议的服务器和客户端.以及运行在服务器上的Web应用等. 攻击基础: HTTP是一种通用的单纯协议机制.在Web应用中,从浏览器那接受到的HTTP请求的全部内容,都可以在客户端 ...

  2. [整理]HTML5 WebSocket

    vs2013 win7 iis7.5貌似不行,查阅了资料,好像得iis8支持 <ASP.NET SignalR系列>第一课 认识SignalR http://www.cnblogs.com ...

  3. 关于Spring mvc注解中的定时任务的配置

    关于spring mvc注解定时任务配置 简单的记载:避免自己忘记,不是很确定我理解的是否正确.有错误地方望请大家指出. 1,定时方法执行配置: (1)在applicationContext.xml中 ...

  4. Guava HashMultiset(MultiSet)

    multiset:多重集合,和set唯一的不同是 set 集合中一个值只能出现一次,而multiset多重集合中一个值可以出现多次.一个典型的应用就是统计单词出现次数 举例: public class ...

  5. 第10月第10天 git

    1. 已经用 git commit  提交了代码. 此命令可以用来回退到任意版本:git reset --hard  commitid https://www.cnblogs.com/qufanblo ...

  6. vue路由DEMO

    index.js,index.vue,course.vue,master.vue等 import Vue from 'vue' import Router from 'vue-router' impo ...

  7. lucene中文分词——(四)

    1.分析器的执行过程:

  8. 转:VMWare服务器虚拟化--转自CSDN

    http://blog.csdn.net/kkfloat/article/category/1249845/3

  9. 诡异的Linux磁盘空间被占用问题,根目录满了,df和du占用不一样【转】

    新公司的测试机磁盘空间空余很小,日志很多,也很大,做个日志压缩脚本,在夜里4:30自动运行,第二天后发现磁盘空间又满了,只好删除没用的日志,清空空间,可诡异的是怎么删除没用的文件,空间还是占用很大.如 ...

  10. 首发:极简的Centos主机监控方法,分分钟即可使用【转】

    需求天天有,今年事更多.硬盘测试刚刚完成,就又来了性能监控的需求.一般我们生产就用zabbix了,用起来还行,就是蛮多脚本要写.开发和测试都是分散的,经常还要重装系统,用zabbix就算了,开发和测试 ...