java 实现最小二叉树堆排序的实例

发布时间 - 2026-01-11 03:22:21    点击率:

java 实现最小二叉堆排序的实例

写在前面:

一觉醒来,我就突然有灵感了......

最小二叉堆定义:

二叉堆是完全二元树或者是近似完全二元树,最小二叉堆是父结点的键值总是小于或等于任何一个子节点的键值的堆堆。

存储:

二叉堆一般用数组来表示。

根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2;

位置k的叶子的父节点位置为(k-1)/2;

实现:

/** 
 * @description 元素添加到末尾,和它的父节点比,如果比它小就交换 
 * @param array 
 * 
 * @author LynnWong 
 */ 
private int[] getMinBinaryHeap(int[] array){ 
  int N = array.length; 
  int minBinaryHeap[] = new int[N]; 
  int root;//根的值 
  int heapSize = 0;//记录插入位置 
  for(int num : array){ 
    minBinaryHeap[heapSize]=num; 
    ++heapSize; 
    int pointer = heapSize-1;//当前指向的数组元素位置 
    while(pointer!=0){ 
      int leafPointer = pointer;//叶子节点位置 
      pointer = (pointer-1)/2;//根节点位置 
      root = minBinaryHeap[pointer];//根节点 
      if(num>=minBinaryHeap[pointer]){//永远把当前数组元素看成叶子与其根比较或者换位 
        break; 
      }//如果根比叶子大 就交换位置 
      minBinaryHeap[pointer] = num; 
      minBinaryHeap[leafPointer] = root; 
       
    } 
  } 
  return minBinaryHeap; 
   
} 

/*** 
 * 用随机数测试二叉堆排序 
 * 测试10遍,强迫症似的变态... 
 */ 
public void text(){ 
  for(int i=0;i<10;i++){ 
    Random rnd = new Random();  
    int [] lala = {rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6),rnd.nextInt(6)}; 
    System.out.print("输入:"); 
    for(int a : lala){ 
      System.out.print(a+" "); 
    } 
    System.out.println(); 
    int []array = this.getMinBinaryHeap(lala); 
    System.out.print("输出:"); 
    for(int a : array){ 
      System.out.print(a+" "); 
    } 
    System.out.println(); 
  } 
} 


如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 实现最小二叉树与堆排序  # 二叉树及堆排序  # C语言植物大战数据结构二叉树堆  # C++中二叉堆排序详解  # 小二  # 键值  # 我就  # 随机数  # 如有  # 希望能  # 堆堆  # 或者是  # 任何一个  # 谢谢大家  # 组中  # 疑问请  # 强迫症  # 写在前面  # 分别在  # param  # brush  # description  # LynnWong  # private 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Java类加载基本过程详细介绍  如何为不同团队 ID 动态生成多个非值班状态按钮  详解Android图表 MPAndroidChart折线图  七夕网站制作视频,七夕大促活动怎么报名?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何实现javascript表单验证_正则表达式有哪些实用技巧  Android实现代码画虚线边框背景效果  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  焦点电影公司作品,电影焦点结局是什么?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  昵图网官网入口 昵图网素材平台官方入口  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  Laravel中的Facade(门面)到底是什么原理  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何快速登录WAP自助建站平台?  Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Android自定义listview布局实现上拉加载下拉刷新功能  如何在万网自助建站中设置域名及备案?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何在橙子建站上传落地页?操作指南详解  Python并发异常传播_错误处理解析【教程】  如何用好域名打造高点击率的自主建站?  用v-html解决Vue.js渲染中html标签不被解析的问题  如何获取上海专业网站定制建站电话?  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Laravel如何自定义错误页面(404, 500)?(代码示例)  如何在VPS电脑上快速搭建网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  JS经典正则表达式笔试题汇总  新三国志曹操传主线渭水交兵攻略  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  如何在服务器上配置二级域名建站?  教你用AI润色文章,让你的文字表达更专业  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何用已有域名快速搭建网站?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  郑州企业网站制作公司,郑州招聘网站有哪些?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Laravel如何实现模型的全局作用域?(Global Scope示例)  长沙企业网站制作哪家好,长沙水业集团官方网站?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  iOS正则表达式验证手机号、邮箱、身份证号等  高性价比服务器租赁——企业级配置与24小时运维服务  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)