目录:

https://blog.csdn.net/stoneWang_L/article/details/89228145

1)冒泡排序

https://blog.csdn.net/stoneWang_L/article/details/89220461

2)插入排序

https://blog.csdn.net/stoneWang_L/article/details/89221348

3)选择排序

https://blog.csdn.net/stoneWang_L/article/details/89220638

4)快速排序

https://blog.csdn.net/stoneWang_L/article/details/89221592

6)归并排序

https://blog.csdn.net/stoneWang_L/article/details/89210938

7)希尔排序

https://blog.csdn.net/stoneWang_L/article/details/89217137

堆排序

堆的概念:

每个结点的值都大于或等于其左右孩子结点的值的完全二叉树,称为大顶堆;

每个结点的值都小于或等于其左右孩子结点的值的完全二叉树,称为小顶堆;

思路:

利用堆进行排序,将待排的序列构成个大顶堆,最大值就是根节点;将根节点移走,(将其和堆末尾元素交换,此时末尾  元素就是最大值),接着将剩余的n-1个序列重新构成一个堆,继续进行。

Code:

package DataStr;import java.util.Arrays;/*** 数组下标0的元素也参与排序* @author stoneWang_L**/
public class HeapSort3 {public static void main(String[] args) {int[] arr = {312,126,272,226,28,165,123,8,12};
//      int[] arr = SortTestHelper.getRandomArray(20, 0, 2);System.out.println("堆排序前:"+Arrays.toString(arr));//堆排序heapSort(arr, arr.length);System.out.println("堆排序后:"+Arrays.toString(arr));}private static void heapSort(int[] arr, int count) {//完成构建大顶堆for(int i=(count-2)/2; i>=0; i--)shiftDown(arr, count, i);System.out.println("构建完成的大顶堆:"+Arrays.toString(arr));//将大顶堆头结点(最大数)与最后一个元素交换位置,然后除去最后这个最大的元素,再shiftDown操作维护该(除去最后一个元素的数组)堆为大顶堆。循环直到升序排序完成for(int j=count-1; j>0; j--) {swap(arr, 0, j);shiftDown(arr, j, 0);}}/*** * @param arr 数组* @param count    元素个数* @param currentRoot 当前根节点的下标*/private static void shiftDown(int[] arr, int count ,int currentRoot) {while(2*currentRoot+1 < count) {int max = 2*currentRoot+1; //初始赋值left孩子if(max+1 < count && arr[max+1] > arr[max])max += 1;if(arr[currentRoot] >= arr[max])break;swap(arr, currentRoot, max);currentRoot = max;}}//交换public static void swap(int[] arr, int n, int m) {int temp = arr[n];arr[n] = arr[m];arr[m] = temp;}
}

结果:

堆排序-java实现相关推荐

  1. 堆排序java实例_堆排序(示例代码)

    前言:网上有很多堆排序的案例,我只想写自己堆排序. 一:堆结构 即:一个父节点最多只能有两个子节点(可以没有),如下图 图1        图2           图3       图4 二: 数组 ...

  2. 堆排序-Java小顶堆排序

    二叉堆满足二个特性:  1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值. 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆).  当父结点的键值总是大于或等于任何一个子 ...

  3. java 小根堆 排序_堆排序(java实现)

    堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性  来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...

  4. 堆排序Java实现以及使用场景

    堆排序是基于大小堆来实现的,利用数组中左右子树的数学规律来进行构建最大树或者是最小树,在这基础上将最大数或者是最小树下沉,并将树的长度减1,直到树的长度为1,最后数组即为排序后的数组 场景:跟快排一样 ...

  5. 大顶堆排序java实现

    堆的性质:  (1)性质:完全二叉树或者是近似完全二叉树:  (2)分类:大顶堆:父节点不小于子节点键值,小顶堆:父节点不大于子节点键值:图展示一个最小堆: (3)左右孩子:没有大小的顺序. (4)堆 ...

  6. 堆维护、堆建立、堆排序-- java实现

    //堆有三个操作.维护堆,建堆,堆排序. public class heapsort { // 维护最大堆public static void maxheap(int nums[], int i,in ...

  7. 堆排序 java实现_堆排序Java实现(递归方式非递归方式)

    很早就学习了堆排序但当时没有用代码实现,现在再去想实现已经忘光光啦┑( ̄Д  ̄)┍,于是就去网上搜了一番,发现没有一篇我能认真看完的文章,没办法就是没耐心,就是笨呗...好了,言归正传= ̄ω ̄= 了解 ...

  8. 十大经典排序算法之堆排序(Java代码实现)

    算法原理 堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法.堆积是一个近视完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点.堆排序可以说 ...

  9. 堆排序和归并排序 java代码实现

    文章目录 堆排序 java代码实现 单元测试 归并排序 java代码实现 单元测试 堆排序 java代码实现 package csdn.dreamzuora.sort;import java.util ...

  10. 数据连接java面试题

    本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~ 一.面向对象的特征都有哪些?他们在使用过程中的优势是什么? (1)对象唯一性 (2)抽象性 (3)继承性 (4)多态性 1.易 ...

最新文章

  1. Linux 性能监控常用命令
  2. 人工智能企业自动化的关键现状和战略影响
  3. mysql什么情况会加意向锁_Mysql 数据库意向锁意义
  4. 定间隔字符翻转(Reverse String II)
  5. jquery让页面滚动到底部
  6. 计划任务 at,cron
  7. 理工科同学转行经管咨询金融,一定要慎重
  8. python之Django学习笔记(五)---后台(admin.py)Action使用
  9. 转 windows查看端口占用命令
  10. SpringBoot打通微信公众号模板消息通知
  11. Linux编程基础之Makefile的使用
  12. 工欲善其事,必先利其器-IntelliJ IDEA
  13. Kubernetes(K8S)入门到运维 ( 六) Helm与功能组件及证书年限
  14. Lattice Diamond用Active-HDL实现仿真
  15. 在HTML中 标记hn的作用,html标记_1.ppt
  16. 接口测试Jmeter
  17. 【Linux环境搭建】十二、Linux(CentOS7) 时序数据库InfluxDB及Influx-proxy安装配置
  18. 轻松解决2013 lost connection to mysql server at ‘reading initial communication packet‘, system error: 0“
  19. 【转】区块链:DeFi 的理论与实践
  20. 随机数生成器(结绳中文app编程)

热门文章

  1. 操作系统原理学习总结
  2. 软盘镜像_软盘表示保存,还有14个其他老人图标不再有用
  3. 反三角函数在线计算机,反三角函数(反正弦,反余弦,反正切,反余切,反正割,反余割)在线计算器_三贝计算网_23bei.com...
  4. 超详细的80个Python入门实例,代码清晰拿来即用,学习提升必备
  5. 大学生创新项目管理系统
  6. SSH config 文件的作用
  7. Python程序猿必备的几款软件
  8. 聊一聊我在 B 站上自学编程的经历吧!
  9. 软件工程需求分析方法
  10. 学生信息管理系统课程设计 java_java课程设计(学生信息管理系统)