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

图解堆排序:从零开始手把手教你两种建堆方法(Python代码示例)

图解堆排序从零开始手把手教你两种建堆方法Python代码示例堆排序作为经典排序算法之一其核心在于如何高效构建堆结构。本文将用图解代码的方式带你彻底理解两种主流建堆方法——自顶向下插入式与自底向上Floyd式的实现差异。无论你是准备技术面试还是夯实算法基础掌握这些建堆技巧都能让你在数据处理时游刃有余。1. 堆结构基础认知1.1 堆的本质特性堆是一种特殊的完全二叉树具有以下核心特征大顶堆性质任意节点的值≥其子节点值根节点为最大值小顶堆性质任意节点的值≤其子节点值根节点为最小值实际存储时通常采用数组实现利用完全二叉树的特性建立索引映射# 索引关系公式 parent (i - 1) // 2 # 父节点索引 left_child 2 * i 1 # 左子节点索引 right_child 2 * i 2 # 右子节点索引1.2 堆排序的基本流程完整堆排序分为两个阶段建堆阶段将无序数组调整为堆结构排序阶段反复取出堆顶元素并调整结构关键提示建堆方式直接影响算法整体性能不同场景下可选用自顶向下或自底向上方法2. 自顶向下建堆法2.1 算法原理图解自顶向下建堆如同插卡游戏从第二个元素开始逐个插入并调整初始数组: [3,1,4] 步骤1: [3] → 插入1 → [3,1] (无需调整) 步骤2: 插入4 → [3,1,4] → 4与父节点3比较 → 交换 → [4,1,3]2.2 Python实现细节核心操作是sift_up上浮函数def sift_up(arr, i): while i 0 and arr[(i-1)//2] arr[i]: # 大顶堆比较 arr[(i-1)//2], arr[i] arr[i], arr[(i-1)//2] i (i - 1) // 2 return arr def build_heap_top_down(arr): for i in range(1, len(arr)): # 从第二个元素开始 sift_up(arr, i) return arr2.3 时间复杂度分析建堆过程的时间复杂度为O(nlogn)主要消耗在第k个元素插入时最多需要⌈log₂k⌉次比较所有元素插入的总比较次数约为∑logk ≈ nlogn3. 自底向上建堆法3.1 Floyd算法精要从最后一个非叶子节点开始逆向调整示例数组: [3,1,4,5,2] 非叶子节点索引: len(arr)//2 - 1 1 调整顺序: 节点1 → 节点03.2 代码实现技巧关键sift_down下沉函数def sift_down(arr, i, size): largest i l, r 2*i 1, 2*i 2 if l size and arr[l] arr[largest]: largest l if r size and arr[r] arr[largest]: largest r if largest ! i: arr[i], arr[largest] arr[largest], arr[i] sift_down(arr, largest, size) def build_heap_bottom_up(arr): for i in range(len(arr)//2 -1, -1, -1): # 逆向遍历非叶节点 sift_down(arr, i, len(arr)) return arr3.4 性能优势解析操作时间复杂度说明建堆过程O(n)数学推导证明总和收敛于n整体排序O(nlogn)与自顶向下法最终复杂度相同但常数项更优4. 两种方法实战对比4.1 核心差异点调整方向自顶向下子节点与父节点比较上浮自底向上父节点与子节点比较下沉适用场景动态数据自顶向下适合流式数据插入静态数据自底向上适合已知全部数据的批量处理4.2 选择策略建议数据规模敏感型当n10⁶时优先选择自底向上内存受限环境两种方法空间复杂度均为O(1)代码简洁需求自顶向下实现更直观易懂5. 堆排序完整实现结合两种建堆方式的完整示例def heap_sort(arr, methodbottom-up): if method bottom-up: arr build_heap_bottom_up(arr) else: arr build_heap_top_down(arr) # 排序阶段 for i in range(len(arr)-1, 0, -1): arr[0], arr[i] arr[i], arr[0] # 交换首尾 sift_down(arr, 0, i) # 调整剩余堆 return arr实际测试对比import time data [random.randint(0,10000) for _ in range(100000)] start time.time() heap_sort(data, top-down) print(f自顶向下耗时: {time.time()-start:.4f}s) start time.time() heap_sort(data, bottom-up) print(f自底向上耗时: {time.time()-start:.4f}s)输出结果示例自顶向下耗时: 0.3827s 自底向上耗时: 0.2914s

相关文章:

图解堆排序:从零开始手把手教你两种建堆方法(Python代码示例)

图解堆排序:从零开始手把手教你两种建堆方法(Python代码示例) 堆排序作为经典排序算法之一,其核心在于如何高效构建堆结构。本文将用图解代码的方式,带你彻底理解两种主流建堆方法——自顶向下(插入式&…...

技术日报|MiroFish两日蝉联今日破3万星,superpowers单日3152星冲击9万里程碑

🌟 TrendForge 每日精选 - 发现最具潜力的开源项目 📊 今日共收录 12 个热门项目🌐 智能中文翻译版 - 项目描述已自动翻译,便于理解🏆 今日最热项目 Top 10 🥇 666ghj/MiroFish 项目简介: 一个简洁通用的群…...

【科研经验贴】全要素生产率估计:从原理到Stata实操,我踩过的坑都在这了

一、什么是全要素生产率?为啥要估计它?很多刚接触实证研究的同学可能会问:“全要素生产率到底是个啥?我为啥要估计它?”其实全要素生产率(Total Factor Productivity, TFP)就是“除了劳动力、资…...

手把手教你用FireRedASR Pro:音频转文字一键搞定,支持MP3/M4A全格式

手把手教你用FireRedASR Pro:音频转文字一键搞定,支持MP3/M4A全格式 你是不是经常需要把会议录音、采访音频或者语音备忘录转换成文字?手动听写不仅耗时耗力,还容易出错。市面上的在线语音转文字工具,要么收费昂贵&am…...

GEO推广服务公司推荐:经验丰富的GEO推广公司有哪些?

温馨提示:文末有资源获取方式 随着AI搜索逐渐成为用户获取信息的首要入口,企业在DeepSeek、豆包等平台的曝光率直接决定了获客能力。然而,面对市面上众多的GEO推广服务商,如何筛选出经验丰富、真正懂技术的团队?以下是…...

5分钟掌握猫抓:网页媒体资源一站式捕获解决方案

5分钟掌握猫抓:网页媒体资源一站式捕获解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-catch)是一款强大的浏览器资源嗅探扩展,专为解…...

Jetson Xavier设备树配置避坑指南:jetson-io实战SPI功能开启

Jetson Xavier设备树配置避坑指南:jetson-io实战SPI功能开启 在嵌入式开发领域,Jetson Xavier系列以其强大的计算能力和灵活的扩展接口成为众多物联网和边缘计算项目的首选平台。其中,SPI(Serial Peripheral Interface&#xff09…...

深度循环网络DRNN在语音识别中的5个关键应用技巧(含TensorFlow 2.0示例)

深度循环网络在语音识别中的五大实战优化策略 语音识别技术正经历着从传统方法到深度学习的革命性转变。在这个转变过程中,深度循环神经网络(DRNN)因其出色的序列建模能力而成为关键推动力。与浅层RNN相比,DRNN通过多层隐藏结构能…...

给爸妈DIY健康手环:用STM32和MAX30102实现跌倒报警+远程监控(附固件)

给爸妈DIY健康手环:STM32与MAX30102的适老化改造实战 去年春节回家,发现父亲的书桌上摆着三款不同品牌的智能手环,但都被闲置在角落。"不是不想用,是字太小看不清,报警功能还总误报",这句抱怨让我…...

导师严选! AI论文工具 千笔 VS 灵感ai,开源免费首选

还在为选题→大纲→初稿→文献→降重→查重→格式→答辩PPT的全流程焦头烂额?千笔AI以八大核心功能实现全流程一站式覆盖,从选题到答辩PPT生成全程护航,让论文写作从“耗时耗力”变成“高效规范”,真正实现“选题快、框架稳、修改…...

从MySQL到MongoDB:新手必知的10个数据建模差异点(避坑指南)

从MySQL到MongoDB:新手必知的10个数据建模差异点(避坑指南) 当开发者从关系型数据库转向文档型数据库时,最大的挑战往往不是语法差异,而是思维模式的转变。就像习惯了用螺丝刀的人第一次拿起扳手,工具不同&…...

ATK-IMU601上位机软件数据不更新?可能是排针接反了!详细焊接与接线避坑指南

ATK-IMU601模块排针焊接与接线完全避坑手册 第一次拿到ATK-IMU601模块时,那种兴奋感我至今记得——直到发现上位机软件死活不更新数据。折腾了整整两天才意识到,问题出在最基础的排针焊接和接线上。这篇文章将分享我从血泪教训中总结的完整解决方案&…...

CVX工具箱安装避坑指南:从下载到运行测试代码的全流程

CVX工具箱安装避坑指南:从下载到运行测试代码的全流程 在工程优化和学术研究领域,凸优化问题无处不在。CVX作为MATLAB平台上最受欢迎的凸优化建模工具包,以其直观的语法和强大的求解能力赢得了广泛认可。然而,对于初次接触CVX的用…...

TypeScript的override关键字(v4.3+):显式标记方法重写

TypeScript的override关键字(v4.3):显式标记方法重写 随着TypeScript 4.3的发布,override关键字的引入为面向对象编程带来了更严格的类型检查机制。这一特性旨在解决继承体系中方法重写可能引发的潜在问题,帮助开发者…...

深入解析POE交换机:AF与AT标准的技术差异与应用场景

1. POE交换机的核心价值与应用场景 想象一下你正在装修新办公室,墙上布满了网线接口,但每个摄像头、无线AP都需要单独拉电源线——这场景是不是让人头皮发麻?POE(Power over Ethernet)技术就是为解决这种困境而生。它让…...

GCC/Clang vs MSVC:不同编译器下预编译头文件配置全指南

GCC/Clang vs MSVC:不同编译器下预编译头文件配置全指南 在跨平台C开发中,编译器的选择往往直接影响项目的构建效率。当你在Linux环境下习惯使用GCC/Clang的高效编译,切换到Windows平台却不得不面对MSVC的漫长等待时,预编译头文件…...

DeOldify一键部署教程:基于Ubuntu 20.04的GPU环境快速搭建

DeOldify一键部署教程:基于Ubuntu 20.04的GPU环境快速搭建 你是不是也见过那些黑白老照片,心里总想着要是能还原成彩色该多好?以前这活儿得靠专业设计师花不少功夫,现在有了AI,这事儿就简单多了。DeOldify就是一个专门…...

如何在5分钟内用Mermaid轻松创建专业图表?终极实用指南

如何在5分钟内用Mermaid轻松创建专业图表?终极实用指南 【免费下载链接】mermaid 项目地址: https://gitcode.com/gh_mirrors/mer/mermaid 你是否曾为制作复杂的流程图、时序图或项目甘特图而头疼?现在,通过Mermaid这款强大的文本驱动…...

Z-Image-Turbo_Sugar脸部Lora从零部署:NVIDIA驱动+CUDA+Xinference全链路验证

Z-Image-Turbo_Sugar脸部Lora从零部署:NVIDIA驱动CUDAXinference全链路验证 1. 环境准备与快速部署 在开始部署Z-Image-Turbo_Sugar脸部Lora模型之前,我们需要确保系统环境正确配置。这个模型专门用于生成甜美风格的人脸图片,基于先进的Lor…...

职场PUA最隐蔽的6句“专业话术”,听起来很对,实则在摧毁你【职场反PUA30天 Day2】

在职场里,很多人都有过这样的困惑:领导说话客客气气,天天讲流程、讲逻辑,到底是真心要求进步,还是在悄悄PUA你?分不清这两者,轻则长期内耗、自我怀疑,重则被不断压榨、消耗到身心俱疲…...

python-flask高校澡堂洗浴浴室预约签到管理系统_78d8c

目录需求分析技术选型数据库设计核心功能实现安全措施测试部署扩展功能项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析 高校澡堂预约签到管理系统需要实现用户注册、登录、预约时段、签到使用…...

如何系统掌握Mermaid:从入门到高效应用

如何系统掌握Mermaid:从入门到高效应用 【免费下载链接】mermaid 项目地址: https://gitcode.com/gh_mirrors/mer/mermaid 文本驱动图表工具Mermaid为您提供了一种高效的数据可视化解决方案,通过简洁的文本语法即可生成专业的流程图、时序图、甘…...

猫抓浏览器扩展:网页媒体资源捕获终极指南

猫抓浏览器扩展:网页媒体资源捕获终极指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓浏览器扩展(cat-catch)是一款功能强大的资源嗅探工具,能…...

代码版本管理:Git工作流简介

代码版本管理:Git工作流简介 在软件开发中,高效的代码版本管理是团队协作的核心。Git作为目前最流行的分布式版本控制系统,其灵活的工作流模式为项目开发提供了强大的支持。无论是个人开发者还是大型团队,合理运用Git工作流都能显…...

猫抓:网页媒体资源捕获与解析解决方案

猫抓:网页媒体资源捕获与解析解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到过想要保存网页中的视频却找不到下载按钮?是否因复杂的流媒体格式而束手无策…...

从触发器到芯片:计数器设计的核心思路与实践

1. 计数器设计的基础原理 计数器作为数字电路中最常见的时序逻辑器件,本质上是由触发器构成的"状态记忆机器"。想象一下老式水表上的机械计数器,每流过一定水量就会推动齿轮转动一格——数字计数器的工作原理也类似,只不过用电子信…...

我的多模态算法实习踩坑实录:除了刷题,这些‘软技能’和‘业务认知’才是关键

多模态算法实习避坑指南:技术之外的核心竞争力拆解 当我第一次踏入多模态算法实习的面试战场时,以为只要刷够LeetCode、背熟模型原理就能轻松过关。直到连续被三家大厂面试官"灵魂拷问"后,才意识到自己完全低估了这个领域的隐性考核…...

从TTL到光:揭秘工业远距离通信中的信号转换核心

1. 工业通信中的信号转换挑战 在工厂自动化生产线或大型设备远程监控场景中,控制信号经常需要穿越几十米甚至上百米的距离。我曾在汽车焊接车间遇到过这样的案例:当PLC控制信号通过普通电缆传输到30米外的机械臂时,电焊机产生的强电磁干扰会导…...

XYCOM XVME-564控制器模块

XYCOM XVME-564 控制器模块介绍XYCOM XVME-564 是一款基于 VME 总线架构的高性能模拟输入控制模块,主要用于工业自动化系统中的数据采集与过程监测。该模块在精度、采样速度以及灵活性方面表现突出,适用于对信号质量要求较高的应用场景。一、产品概述XVM…...

计算机毕业设计springboot设备维护小程序 基于SpringBoot的智能化设备运维管理平台设计与实现 企业资产设备全生命周期管理系统的设计与开发

计算机毕业设计springboot设备维护小程序4zs100f8 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着工业4.0和智能制造的深入推进,企业生产设备日益精密化、复杂化…...