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

堆(二插堆)

一、堆的基本概念

堆是一种基于完全二叉树的数据结构,并且满足堆序性质

  • 大顶堆(大根堆):任意父节点的值 ≥ 子节点的值,堆顶为最大值。
  • 小顶堆(小根堆):任意父节点的值 ≤ 子节点的值,堆顶为最小值。

特点:

  • 逻辑上是一棵完全二叉树
  • 物理上可以用数组顺序存储
  • 不要求中序有序,只要求父子有序
  • 常用于排序、优先队列、TOP-K 问题等

二、堆的节点下标计算公式(数组从 0 开始)

对于数组中任意下标为i的节点:

  1. 左孩子下标:child_left = 2 * i + 1
  2. 右孩子下标:child_right = 2 * i + 2
  3. 父节点下标:parent = (i - 1) / 2(整数除法)

最后一个非叶子节点

数组长度为n时:最后一个非叶子节点下标:last_non_leaf = (n - 2) / 2

堆排序建堆时,就是从这个位置自底向上调整。


三、堆排序核心思路

  1. 构建大顶堆从最后一个非叶子节点开始,向上逐个执行向下调整,使整个数组满足堆性质。

  2. 交换堆顶与末尾元素将堆顶最大值放到数组末尾,确定一个元素的最终位置。

  3. 重新调整堆结构排除已排好的末尾元素,对新堆顶再次向下调整,重复上述步骤直到整个数组有序。


四、时间复杂度

  • 建堆:O(n)
  • 排序:每次调整 O (log n),共 n 次 →O(n log n)
  • 整体时间复杂度:O(n log n)
  • 空间复杂度:O(1)(原地排序)

堆排序不依赖数据初始顺序,最好、最坏、平均复杂度都是O(n log n)


五、总结

  • 堆 = 完全二叉树 + 堆序性质
  • 数组存储,下标公式是核心
  • 堆排序 = 建堆 + 交换堆顶 + 向下调整
  • 高效稳定的排序算法,时间复杂度 O (n log n),原地排序
堆排序:实现从小到大的排序 用大堆
void Heapsort(int* arr, int n) { for (int i = (n - 1 - 1) / 2; i >= 0; i--) {//从最下面的节点开始进行调整让后向上继续调整 int parent = i; int child = parent * 2 + 1; while (child < n) { if ((child + 1 < n) && arr[child] < arr[child + 1]) { child++; } if (arr[child] > arr[parent]) { swap(&arr[child], &arr[parent]); parent = child; child = parent * 2 + 1; } else { break; } } } int end = n - 1; while (end > 0) {//每次交换后我们要重新向下调整 swap(&arr[0], &arr[end]); int parent = 0;//从第一个开始 int child = parent * 2 + 1; while (child < end) { if ((child + 1 < end) && arr[child] < arr[child + 1]) { child++; } if (arr[child] > arr[parent]) { swap(&arr[child], &arr[parent]); parent = child; child = parent * 2 + 1; } else { break; } } end--;//当前最后一个值成为最大值 } }
http://www.jsqmd.com/news/675865/

相关文章:

  • 别再让Unity微信小游戏变‘火星文’!手把手教你用Custom Set搞定中文字体(附自动扫描脚本)
  • 旧手机焕新记:Redmi 4X刷入Ubuntu Touch,打造低成本、可远程管理的轻量级服务器
  • 抖音批量下载终极指南:3个高效技巧+5个避坑方案,轻松搞定自媒体素材管理
  • WebPlotDigitizer终极指南:5步从图表图像中提取精确数据
  • 剖析可靠的保温袋服务厂商,性价比高的厂家有哪些 - 工业推荐榜
  • YOLOv5模型轻量化实战:如何将官方代码封装成函数,并集成车道线检测?
  • 别再只用QThread了!Qt 6.5实战:用QtConcurrent和Lambda轻松搞定异步任务
  • Ubuntu服务器全盘加密与远程启动自动化解密实践
  • Joe易航主题 - 极速优雅的Typecho多功能主题
  • 2026年激光雕刻机厂家推荐榜:光纤激光雕刻机、双光源激光雕刻机、DIY 激光雕刻机、入门级激光雕刻机厂家选择指南 - 海棠依旧大
  • bpRNA数据库数据分析整理
  • 别再乱改sys_hba.conf了!手把手教你配置KingbaseES客户端安全登录(含SSL/GSSAPI实战)
  • NVIDIA Profile Inspector完整指南:显卡驱动配置与性能优化实用技巧
  • Android车载流媒体后视镜开发:用Presentation API搞定400x1920异形副屏适配
  • 别再手动挂盘了!用NFS+StorageClass在K8s里实现PV动态供给(附避坑指南)
  • AI代码审查实战:用大模型构建自动化代码质量守卫系统
  • 思源黑体TTF字体:免费商用的多语言排版终极解决方案
  • AI Agent在航空旅行服务中的应用
  • 别再硬编码了!用MODIF ID和USER-COMMAND动态控制ABAP选择屏幕字段显示
  • SDMatte镜像安全扫描报告:Trivy扫描零高危漏洞+SBOM软件物料清单
  • AI论文生成工具有哪些?实测8款AI论文生成工具排行榜,高效完成开题报告! - 掌桥科研-AI论文写作
  • Linux Socket编程进阶:send()函数flags参数全解析,从MSG_DONTWAIT到MSG_MORE的实战避坑指南
  • RWKV7-1.5B-world开源镜像详解:软链防御架构(/root/assets + /root/models)设计逻辑
  • 备战2026雅思?这份亲测好用的雅思app推荐,帮你少走弯路 - 品牌2025
  • 从栅格到矢量:手把手教你用高德/百度/腾讯瓦片定制个性化Web地图
  • 深聊工业输送用钢骨架复合管推荐哪个厂家,如何选择 - myqiye
  • 2026年成都微电影拍摄公司大揭秘,哪家才是你的心头好? - 红客云(官方)
  • codeforce二分题目
  • Windows Cleaner:从C盘爆红到系统重生的智能管家
  • 为什么你的开关电源效率低?可能是没用对肖特基二极管(附型号推荐)