二叉树-堆1

发布时间:2026/9/5 23:09:51

二叉树-堆1
完美二叉树若像下图这样写当child为堆顶时计算parent为0不会是-0.5向上取整为0while判断parent为0符合条件进入循环此时ifa[child]a[parent],跳出循环。这只是程序能巧合运行将代码循环条件改为child0,即优化为上面代码即可向下调整算法1.接口是 HPDataType* a, int n, int parent2.算出孩子child以左孩子为例使用假设法始终让child为小的孩子3.1将parent与孩子对比若孩子小于双亲则交换同时继续判断交换下去的值是否需要再次交换所以将parent改为child重新计算child。2 否则break4.while循环若直至child到从下往上第一层parent为从下往上第二层若再执行一次31child不存在(超出了数组)此时child与parent都是从下往上第一层同一个节点不需要再循环所以循坏结束条件是childn.pop 删除在小堆的基础上用插入包含向上调整法根的左右子树是小堆交换首尾元素后删除尾元素左子树和右子树是小堆,将最小的堆顶元素交换到数组尾部然后使用向下调整算法将首元素与下面的两个元素中小的元素依次交换交换到不能交换为止建立小堆。删除的都是剩余数据中最小的数据所以会由小到大依次删除数据孩子给双亲以 以下图中算法给数组进行堆排序HPPush函数传的是结构体变量地址该函数额外申请内存存放堆需要消耗额外的空间来存放堆空间复杂度O(n)Destroy(hp);}以下图片没有传结构体变量指针原因而是直接传数组首元素地址直接在所给数组基础上排序不用再调用排序函数排序函数需要消耗额外的空间减少空间复杂度以下算法直接在所给数组上进行堆排序不用再调用排序函数减少空间复杂度向上调整算法排序数组/向下调整算法排序数组向上调整算法/向下调整算法可以分别构建大和小堆将无序的数组用向上调整算法/向下调整算法重新排列成小堆以向上调整算法建小堆为例再将数组的首尾元素交换此时尾元素不在数组中算将数组用向下调整法重新拍列成小堆将数组长度减一重复循环至循环结束即可得到一个由大到小的数组。即下方的//降序建小堆。反之亦然。void HeapSort(int* a, int n){// 降序建小堆// 升序建大堆for (int i 1; i n; i) 因为是直接在数组本身上调整排序所以直接从第二个元素开始与第 一个元素比较{AdjustUp(a, i);}int end n - 1;while (end 0){Swap(a[0], a[end]);AdjustDown(a, end, 0);--end;}}void TestHeap2(){int a[] { 4,2,8,1,5,6,9,7,2,7,9};HeapSort(a, sizeof(a) / sizeof(int));}int main(){TestHeap2();return 0;}向下调整算法排序数组还有另外一种算法按照大堆重新排列为了确保除根外的左右子树是按大堆排列我们可以从倒数第一个非叶子节点最后一个元素的双亲节点开始用向下调整算法调大堆倒数第二个非叶子节点开始调大堆以此类推直至除根外的左右子树是按大堆排列然后再用向下调整算法将无序的数组用向下调整算法建堆按照大堆重新排列再将数组的首尾元素交换此时尾元素不在数组中算将数组用向下调整法重新拍列成大堆将数组长度减一重复循环至循环结束。即可得到一个由小到大的数组。即下方的//降序建小堆。void HeapSort(int* a, int n){for (int i (n-1-1)/2; i 0; i--){AdjustDown(a, n, i);}int end n - 1;while (end 0){Swap(a[0], a[end]);AdjustDown(a, end, 0);--end;}}void TestHeap2(){int a[] { 4,2,8,1,5,6,9,7,2,7,9};HeapSort(a, sizeof(a) / sizeof(int));}int main(){TestHeap2();return 0;}向上调整算法logN向下调整算法logN向上调整算法排序数组O(N*logN)向下调整算法排序数组O(N*logN)向下调整算法建堆O(N)循环条件

相关新闻

Spring Boot构建学生学情预警管理系统实战

Spring Boot构建学生学情预警管理系统实战

2026/9/5 23:09:51

简介:本资源是一套面向高校教育信息化开发者的Spring Boot后端实战项目,聚焦学生学业预警场景,解决教学管理中成绩异常识别、多角色协同响应与动态配置支撑等实际问题。压缩包共381个文件,含79个Java核心业务类(涵盖Co…

3 分钟看懂如何解码并重打包安卓应用:免费 APK 逆向工具 Apktool 上手指南

3 分钟看懂如何解码并重打包安卓应用:免费 APK 逆向工具 Apktool 上手指南

2026/9/5 23:09:51

3 分钟看懂如何解码并重打包安卓应用:免费 APK 逆向工具 Apktool 上手指南 【免费下载链接】Apktool A tool for reverse engineering Android apk files 项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool 想改掉某个应用里的文案,或者…

用Python做一个接单报价计算器:基础语法实现项目成本估算

用Python做一个接单报价计算器:基础语法实现项目成本估算

2026/9/5 22:19:49

你有没有算错过自己的接单报价?对方问“这个管理系统大概多少钱”,你脑子里的第一反应往往是:先报个感觉差不多的数,气氛到了,再多少留点砍价空间。但真正做起来才发现,当时报的是“登录加商品管理”&#…

调试记录2026

调试记录2026

2026/9/5 23:59:53

2026年7月20日 Depth Anything V3生成的点云,效果看上去还可以 在Photoshop中进行高斯模糊(模拟失焦)后再检测,依然可以保持尺相对度: 更大的高斯模糊 在图片中添加纯色块 2026年8月10日 MUJOCO动力学仿真

AI Agent之后,企业真正需要的不是一个机器人,而是一支AI员工团队

AI Agent之后,企业真正需要的不是一个机器人,而是一支AI员工团队

2026/9/5 23:59:53

系列文章目录 《AI Agent之后,企业真正需要的不是一个机器人,而是一支AI员工团队》 《为什么很多企业用了AI工具,却没有真正实现AI转型?》 《未来企业组织架构:人类员工 AI数字员工》 《企业建设AI Agent&#xff0c…

基于CNN的调制信号识别:MATLAB实现时频图分类实战

基于CNN的调制信号识别:MATLAB实现时频图分类实战

2026/9/5 23:59:53

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

2026/9/5 23:59:53

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

2026/9/5 23:59:53

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

电商后端重构实战:代码分层、数据库治理与缓存异步化改造

电商后端重构实战:代码分层、数据库治理与缓存异步化改造

2026/9/5 23:49:52

如果你维护过电商类后端系统,应该不会对下面的场景感到陌生:新同学入职后问“订单状态存在哪几个表”,没人能一句话回答;加一个商品标签,要牵连十几个类;核心订单接口响应时好时坏,却说不清慢在…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/5 23:14:13

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…