news 2026/4/21 9:23:16

堆(二插堆)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
堆(二插堆)

一、堆的基本概念

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

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

特点:

  • 逻辑上是一棵完全二叉树
  • 物理上可以用数组顺序存储
  • 不要求中序有序,只要求父子有序
  • 常用于排序、优先队列、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--;//当前最后一个值成为最大值 } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 9:18:26

8大网盘直链解析神器:如何轻松获取真实下载地址的完整指南

8大网盘直链解析神器&#xff1a;如何轻松获取真实下载地址的完整指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / …

作者头像 李华
网站建设 2026/4/21 9:15:26

nli-MiniLM2-L6-H768企业实操:NLI服务接入内部知识库语义检索链路

nli-MiniLM2-L6-H768企业实操&#xff1a;NLI服务接入内部知识库语义检索链路 1. 模型概述 nli-MiniLM2-L6-H768是一个专为自然语言推理(NLI)与零样本分类设计的轻量级交叉编码器(Cross-Encoder)模型。它在保持接近BERT-base精度的同时&#xff0c;通过6层768维的紧凑结构实现…

作者头像 李华
网站建设 2026/4/21 9:12:40

齿轮箱零部件及其装配质检中的TVA技术突破(19)

前沿技术背景介绍&#xff1a;AI 智能体视觉检测系统&#xff08;Transformer-based Vision Agent&#xff0c;缩写&#xff1a;TVA&#xff09;&#xff0c;是依托 Transformer 架构与“因式智能体”范式所构建的高精度智能体。它区别于传统机器视觉与早期 AI 视觉&#xff0c…

作者头像 李华
网站建设 2026/4/21 9:07:34

用STC8G1K08单片机DIY智能车信标调试板,手把手教你从原理图到调频发射

基于STC8G1K08的智能车信标调试板实战指南 在智能车竞赛中&#xff0c;信标组的选手常常面临一个棘手问题&#xff1a;官方信标硬件尚未发布&#xff0c;但调试工作刻不容缓。本文将带你从零开始&#xff0c;用STC8G1K08单片机和QN8027调频芯片打造一款低成本、高性能的信标调试…

作者头像 李华