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

场景:跟快排一样是一个O(nLogn)的算法,但是在堆排序中有较多次数的交换,所以总体来说,是比不上快排的,但是如果你需要的不是整个排序,而是最大或者是最小的一部分,那么堆排序就具有很大优势了

实现:

private static void heapSort(int[] arrays){buildMaxHeap(arrays,arrays.length);for(int i = arrays.length;i>1 ;i--){swap(arrays,0,i-1);adjustHeap(arrays,0,i-1);}}/*** 构建最大树* */private static void buildMaxHeap(int[] arrays ,int length){for(int i = (length>>1)-1;i>=0 ;i--){adjustHeap(arrays,i ,length);}}/**** 对数据的第i个节点进行比较,将左右子节点的最大值放到i节点,* 如果发生交换,则需要对子节点的子树进行比较*/private static void adjustHeap(int[] arr ,int i ,int length){

堆排序Java实现以及使用场景相关推荐

  1. java线程泄露_面试官:小伙子先来说一下可能引起Java内存泄露的场景吧

    原标题:面试官:小伙子先来说一下可能引起Java内存泄露的场景吧 本文分析一下可能引起java内存泄露的场景: 通过 finalize 方法 终结器finalizers的使用是潜在内存泄漏问题的另一个 ...

  2. java备忘录模式应用场景_图解Java设计模式之备忘录模式

    图解Java设计模式之备忘录模式 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态. ...

  3. java迭代器的使用场景_集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示...

    一句话概括: 顺序访问集合对象的元素,不需要知道集合对象的底层表示. 补充介绍: 迭代器模式(Iterator Pattern)相信大家都已经见过不少次了,当你学习Java或者其他编程语言的开始你就会 ...

  4. java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图

    Java高级----异常处理机制.自定义异常----含思维导图 Java高级----异常处理机制.自定义异常----含思维导图 南一Java自学交流QQ群: 586012641 拒绝任何广告,共享Ja ...

  5. java监听器模式使用场景_常用监听器及其应用场景

    常用监听器举例,及应用场景分析: 已用过的有动作监听器,鼠标监听器,鼠标移动监听器 1.MouseAdapter可以包括以下几个监听器的方法,因此,我们写的时候可以直接写这个 public abstr ...

  6. java事务不生效场景_讲一下,我最近帮忙面试的几个“高级”JAVA,真的心累

    最近看了很多简历,很多候选人年限不小,但是想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见. 在沟通中发现,由于年限不小,他们的定位基本都是" ...

  7. 从青铜到王者的路线,java枚举类使用场景

    一.先来解读:23种设计模式要点 1.单例模式(Singleton Pattern) 2.工厂模式 3.抽象工厂模式(Abstract Factory Pattern) 4.模板方法模式(Templa ...

  8. java中wait的场景,wait——webdriver实用指南java版

    场景 Wait类的使用场景是在页面上进行某些操作,然后页面上就会出现或隐藏一些元素,此时使用WebDriverWait类的until方法来等待这些效果完成以便进行后续的操作.另外页面加载时有可能会执行 ...

  9. Java私有方法运用场景_java6-3 封装和private关键字

    1.  private: 是一个权限修饰符 可以修饰成员变量和成员方法 被其修饰的成员只能在本类中被访问 定义一个学生类: 成员变量:name,age 成员方法:show()方法 2.我们在使用这个案 ...

最新文章

  1. 暑期集训3:几何基础 练习题B: HDU - 2001
  2. java.util.timezone_java.util.TimeZone.getTimeZone()
  3. 如何在命令行模式下升级的你Visual Studio的Solution文件
  4. 电脑组装与维护教程_小白不会装机?教你如何自己组装一台电脑。装机图文教程...
  5. 建造者模式源码解析(jdk-guava+mybatis)
  6. java生成apk工具,生成并运行apk流程
  7. 记事本写html怎么加a1图片,记事本-功能待添加
  8. Mybatis Mapper自动注入警告的解决方案
  9. [luoguP2285] [HNOI2004]打鼹鼠(DP)
  10. 必备9种能力、9种手段、9种心态
  11. 数据迁移其实是很难的
  12. 服务器搬迁方案_网站服务器迁移方案
  13. easyWeChat 6.X微信支付V3下载更新微信支付平台证书
  14. 一起Talk Android吧(第三百一十七回:Android中的虚拟按键)
  15. 【转】Android地图开发之OpenStreetMap基础教程
  16. 计算机信息心得体会作文50字,考试感想作文50字5篇
  17. kinect for Unity开发
  18. Windows系统无NVIDIA卡安装APEX
  19. 台式计算机液晶显示屏尺寸,怎么看台式机显示器尺寸
  20. 问题排查-Flink session窗口最后一个不过期问题

热门文章

  1. 什么是阻塞式和非阻塞io流?
  2. python证书认证_使用Python进行证书认证的Selenium Webdriver
  3. 【算法】算法学习网站
  4. Linux 用户和用户组详解
  5. 权限控制框架 shiro
  6. 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
  7. Linux操作系统渗透测试
  8. 银河麒麟服务器操作系统V10SP2搭建时间服务器
  9. matlab6.0哪一年,MATLAB版本与年份间的对应关系
  10. th标签内的Cannot resolve ‘msg‘爆红出现的问题