博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法-堆排序详解
阅读量:3962 次
发布时间:2019-05-24

本文共 1486 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public static void heapSort(int[] arr) {
if(arr == null || arr.length < 2) {
return; } for(int i = 0; i < arr.length; i++) {
heapInsert(arr, i); } int heapSize = arr.length; heapSize--; swap(arr, 0, heapSize); while (heapSize > 0) {
heapify(arr, 0, heapSize); heapSize--; swap(arr, 0, heapSize); } } //插入一个新的节点让它变为大顶堆 把index的节点上浮 public static void heapInsert(int[] arr, int index) {
//先根据当前节点找到父节点 比较和父节点的大小 while(arr[index] > arr[(index - 1) / 2]) {
//交换两者的位置 swap(arr, index, (index - 1) / 2); index = (index - 1) / 2; } } //把index的节点下浮 heapSize为元素的个数 public static void heapify(int[] arr, int index, int heapSize) {
int left = 2 * index + 1;//获取左孩子 while (left < heapSize) {
//左孩子没越界 //获取左右孩子最大值的下标 int largest = left + 1 < heapSize && arr[left] < arr[left + 1]? left + 1 : left; //然后与父节点比较 largest = arr[largest] > arr[index]? largest:index; if(largest == index) {
break; } swap(arr, largest, index);//左右孩子的最大值与父节点交换 //继续找左孩子 index = largest; left = 2 * index + 1; } } public static void swap(int[] arr, int i, int j) {
int a = arr[i]; arr[i] = arr[j]; arr[j] = a; }

转载地址:http://mqhzi.baihongyu.com/

你可能感兴趣的文章
个人创业“六大死穴”
查看>>
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>
软件配置管理概念-1,介绍
查看>>
软件配置管理概念-2,用户角色
查看>>
软件配置管理概念-3,CM系统的概念
查看>>
JSP/Servlet应用程序优化八法
查看>>
人生必修的181条佛理
查看>>
The Most Widely Used Java Libraries
查看>>
简单在单机使用apache-james(开源邮件服务器)
查看>>
lsof 快速起步
查看>>
跨平台Java程序注意事项
查看>>
Python字符与数字的相互转换
查看>>