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

图解大顶堆的构建、排序过程

一、堆的基本概念

堆是一种非线性结构,可以看作是一棵二叉树,也可以表示为一个数组。简而言之,堆就是利用完全二叉树的结构来维护的一维数组。

堆分为大顶堆小顶堆两种类型:

  • 大顶堆:每个节点的值都大于或等于其左右孩子节点的值。
  • 小顶堆:每个节点的值都小于或等于其左右孩子节点的值。

在排序算法中:

  • 升序排序使用大顶堆。
  • 降序排序使用小顶堆。

对于Top K问题,也可以用堆来实现:

  • 最大的 K 个元素:使用小顶堆。
  • 最小的 K 个元素:使用大顶堆。
二、大顶堆的构建过程

大顶堆的构建过程从最后一个非叶子节点开始,从下往上进行调整。

如何找到最后一个非叶子节点?
假设用数组表示待排序的序列,则最后一个非叶子节点的位置是:数组长度/2 - 1
例如,若数组长度为9,则最后一个非叶子节点的位置是:9/2 - 1 = 3

调整过程

  1. 比较当前节点与左子树的值
    • 如果当前节点小于左子树的值,交换两者的位置。
    • 交换后,检查左子树是否满足大顶堆的性质,不满足则重新调整子树结构。
  2. 比较当前节点与右子树的值
    • 如果当前节点小于右子树的值,交换两者的位置。
    • 交换后,检查右子树是否满足大顶堆的性质,不满足则重新调整子树结构。

当无需交换时,大顶堆的构建完成。

图解:以数组 [3, 7, 16, 10, 21, 23] 为例,展示大顶堆的构建过程。

三、大顶堆的排序过程

排序过程概括如下:

  1. 构建大顶堆:将无序序列构造成大顶堆。
  2. 交换根节点与末尾元素:最大值(堆顶)与末尾元素交换,此时末尾元素为最大值。
  3. 重新构建大顶堆:将剩余的 n-1 个元素重新构建成大顶堆。
  4. 重复步骤2和3:直到整个序列排序完成。

总结: 以上过程反复执行,最终将一个无序的数组排序为一个有序序列。

原文链接:https://www.cnblogs.com/sunshineliulu/p/12995910.html​​​​​​

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 猫头虎 分享已解决Bug || 504 Gateway Timeout 解决方案
  • 手绘图系列 06 | 您一上Google就能接触到的Tries
  • FPGA设计之跨时钟域(CDC)设计篇(5)----同步FIFO的两种设计方法(计数器法/高位扩展法 | 手撕代码)
  • ArcGIS Pro 3.1学习之旅 ----day01 Arcgis pro安装
  • 苍穹外卖day12(day15)---数据统计——Excel报表(项目完结)
  • 使用FFmpeg实现摄像头RTMP实时推流
  • clickhouse安装部署问题求大佬看看
  • 科技云报道:“大模型+机器人”,具身智能将开启“智械时代”
  • 萌啦数据软件价格多少,萌啦数据软件价格是多少
  • Web 安全之 RCE(Remote Code Execution)攻击详解
  • LVS 负载均衡
  • KAN卷积神经网络来了!全新混合架构已开源,训练速度狂飙16倍
  • 学习C#-接口
  • Qt 将生成的exe文件自动复制到其它目录下
  • 微信小程序【五】摇骰子
  • [数据结构]链表的实现在PHP中
  • DOM的那些事
  • Elasticsearch 参考指南(升级前重新索引)
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascript编码规范
  • Vue2 SSR 的优化之旅
  • 程序员最讨厌的9句话,你可有补充?
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 聚簇索引和非聚簇索引
  • 前端之Sass/Scss实战笔记
  • 赢得Docker挑战最佳实践
  • 用jQuery怎么做到前后端分离
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java总结 - String - 这篇请使劲喷我
  • 阿里云ACE认证之理解CDN技术
  • ​queue --- 一个同步的队列类​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • ​数据结构之初始二叉树(3)
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #知识分享#笔记#学习方法
  • (1)(1.11) SiK Radio v2(一)
  • (160)时序收敛--->(10)时序收敛十
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm码农论坛 毕业设计 231126
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (转)Linux下编译安装log4cxx
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net MySql
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [C++打怪升级]--学习总目录