堆排序算法的步骤:
首先将给定的无序数组排成一个大顶堆
交换大顶堆的首尾元素,然后删除尾部元素,将剩余元素再构建大顶堆,循环直到到达根节点。
若array[0,…,n-1]表示一颗完全二叉树的顺序存储模式,则双亲节点指针和孩子结点指针之间的内在关系如下:

任意一节点指针 i:父节点:i==0 ? null : (i-1)/2

左孩子:2*i + 1

右孩子:2*i + 2
代码:

 public  int[] sort(int[] arr) {int len =arr.length;if(len<1)return arr;help(arr,len);while(len>0) {int temp=arr[len-1];arr[len-1]=arr[0];arr[0]=temp;gene(arr, 0,len-1);//交换大顶堆首尾,然后重建大顶堆len--;}return arr;}public void help(int[] arr,int len) {for(int i=len/2-1;i>=0;i--) {gene(arr,i,len);}}public void gene(int[] arr,int n,int len) {//主要功能根据给定的数组构建大顶堆int maxindex =n;//n*2+1左子节点if(n*2+1<len && arr[n*2+1]>arr[maxindex]) {maxindex=n*2+1;}if(n*2+2<len && arr[n*2+2]>arr[maxindex]) {maxindex=n*2+2;}if(maxindex!=n) {int temp=arr[maxindex];arr[maxindex]=arr[n];arr[n]=temp;gene(arr,maxindex,len);//重要}}

堆排序(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. 落地三大产业,深耕两个领域,百度AI的这一年|李彦宏乌镇行
  2. 电脑安装python为什么显示的是程序丢失-python报错:无法启动此程序,因为计算机中丢失...
  3. 美国读本科出勤率低被休学,无法毕业怎么办
  4. linux之如何复制文件夹所有文件到其它文件夹
  5. 360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...
  6. raspberry pi 家族
  7. Openjudge_ 2.1基本算法之枚举_1809 两倍 C++ scratch
  8. Javascript表达式中连续的 和 || 之赋值区别
  9. 期权“不公平”是认识上的错误
  10. SQL Prompt 快捷键
  11. 《数据库系统概念》20-恢复系统
  12. html相同标签替换,html替换把多有标签替换成p标签
  13. JS实现点击复制目标内容
  14. Python根据mask在原图上进行标记
  15. Speedoffice(ppt)中如何插入表格
  16. 最简单易懂的ios p12证书 和描述文件的创建,IPA上传,最完整的ios上架苹果商店教程
  17. AT学习报告一 软件的初步使用
  18. 2022广东省安全员A证第三批(主要负责人)试题及模拟考试
  19. Java API--IO流整理
  20. LFI、RFI、PHP封装协议安全问题学习

热门文章

  1. 同步、异步、堵塞、非堵塞概念总结
  2. eclipse 替换注释
  3. 我的vs2010扩展备忘.jpg
  4. Symantec 11.0企业版安装与配置简介
  5. MySql 中文乱码问题
  6. 9.这就是搜索引擎:核心技术详解 --- 用户查询意图分析
  7. 12.Vim 打造成 PHP 开发环境
  8. 24.磁盘配额(Quota)
  9. 6.苹果官方鼠标移动速度慢问题解决(Magic Mouse)
  10. 9.打开ZF的错误提示