当前位置: 首页 > news >正文

堆排序

目录

堆排序(不稳定):

    代码实现:

    思路分析:

     总结:


堆排序(不稳定):

   如果想要一段数据从小到大进行排序,则要先建立大根堆,因为这样每次堆顶上都能取到数据中最大的,可以交换到一段数据最后面。

    代码实现:

public static void heapSort(int[] arr) {createHeap(arr);int end = arr.length - 1;while(end > 0) {swap(arr,0,end);siftDown(arr,0,end);end--;}}//建立大根堆public static void createHeap(int[] arr) {for (int i = (arr.length-1-1) / 2; i >= 0 ; i--) {siftDown(arr,i, arr.length);}}//向下调整private static void siftDown(int[] arr,int parent, int k) {int child = 2 * parent + 1;while(child < k) {if(child + 1 < k && arr[child + 1] > arr[child]) {child++;}if(arr[child] > arr[parent]) {//交换swap(arr,parent,child);parent = child;child = 2 * parent + 1;}else {break;}}}private static void swap(int[] arr,int i,int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}

    思路分析:

        

       红色代表数组下标。

        首先,想要从小到大排序,在堆排序开始之前,先对数据建立一个大根堆,之后,交换0下标和数据末尾的值,这样最后一个下标的值得到的是该段数据中最大的值了,再从0下标位置开始向下调整这个堆,以此往复,当 end 为 0 时停止。此时从上往下,从左往右得到的就是升序的数据了。

        

     总结:

        排升序要建大堆,排降序建小堆。

        

http://www.lryc.cn/news/535263.html

相关文章:

  • 【MySQL】我在广州学Mysql 系列—— 数据备份与还原
  • 【LeetCode Hot100 双指针】移动零、盛最多水的容器、三数之和、接雨水
  • HTML应用指南:利用POST请求获取接入比亚迪业态的充电桩位置信息
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • Jenkins+gitee 搭建自动化部署
  • 【文本处理】如何在批量WORD和txt文本提取手机号码,固话号码,提取邮箱,删除中文,删除英文,提取车牌号等等一些文本提取固定格式的操作,基于WPF的解决方案
  • Linux系统引导与服务管理
  • 网络工程师 (30)以太网技术
  • react项目引入tailwindcss不生效解决方案
  • 【C#】条件运算符
  • Windows11+PyCharm利用MMSegmentation训练自己的数据集保姆级教程
  • WPS计算机二级•文档的文本样式与编号
  • Word中Ctrl+V粘贴报错问题
  • python-leetcode 24.回文链表
  • 数据治理双证通关经验分享 | CDGA/CDGP备考全指南
  • 3.4 学习UVM中的uvm_monitor类分为几步?
  • Java在大数据处理中的应用:从MapReduce到Spark
  • 日常吐槽。
  • 2025最新版Node.js下载安装~保姆级教程
  • 机器学习:学习记录(二)
  • 迁移学习 Transfer Learning
  • 实现:多活的基础中间件
  • Mybatis源码01 - 总体框架设计
  • 在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合
  • Selenium WebDriver自动化测试(扩展篇)--Jenkins持续集成
  • Wiki文档转换为Word技术
  • 1.【线性代数】——方程组的几何解释
  • 力扣1448. 统计二叉树中好节点的数目
  • 【C#零基础从入门到精通】(二)——C#注释和命名法详解
  • SQLServer的创建,表创建,主键,约束,模糊查询