【python】堆排序

堆的概念

:一种特殊完全二叉树,也就是二叉树必须全部是满的,但是最后一排可以从右向左缺失。

大根堆:每个节点都比他的子节点大

小根堆:每个节点都比子节点小

堆在代码中的形式

堆在代码中实际上就是列表,只不过我们根据堆与列表的关系,把列表中的数想象为了堆。

这个堆在列表中是这个样子的。

我们从上向下,从左到右依次写入列表中就是这个堆。

lsit=[1,5,4,3,2]

父节点跟左子节点的关系为i=2i+1

父节点跟右子节点的关系为i=2i+2

堆的向下调整

有时一个堆并不是大根堆的排序方式

或者这个堆左右子树是大根堆,但整体不是。

可以用这个向下调整的方式进行调整调整成为大根堆。

 堆排序的步骤

1.构建堆

2.取出最上面的数,然后把最后一行的最后一个数放到第一位

3.进行一次向下调整

4.再取出最上面的那个数

5.重复知道数字全部取出为止

构建堆

从最下面一行开始,选出最大的与他们上方的数字比较,把大数放到上面。

排好最底层之后,依次向上面进行向下调整操作。

向下调整代码

因为使用过程中会多次使用到向下调整的代码,所以尽量要提前写好函数。

def sort(li,up,dn):
    '''
    本函数用于堆的向下调整
    :param li:列表
    :param up: 堆顶的数
    :param dn: 列表最右边的数
    :return:
    '''
    i=up#定义父节点索引
    c=2*i+1#定义子节点索引
    top=li[i]#储存最上方的索引
    while c<=dn:#如果有子节点
        if c+1<=dn and li[c+1]>li[c]:#如果有右子节点而且比左节点大
            c=c+1#把子节点索引定义到右节点
        if li[c]>top:#如果子节点大于该节点
            li[i]=li[c]#把子节点放到上面
            i=c#继续向下看
            c=2*i+1
        else:#如果不比他大
            li[i]=top#直接放到这里
            break
    else:#如果没有子节点了
        li[i]=top#直接放下
    return li

构建堆代码

原理:找到最后一个不是叶子节点的节点,然后依次向前进行向下调整

def dui_sort(li):
    n=len(li)#获取长度
    for i in range((n-2)//2,-1,-1):#找到最后的非叶子节点,然后依次向前
        sort(li,i,n-1)#进行向下调整

 依次出数代码

原理:最上面的数是最大的,那么把最上面的数跟堆最后面的数换位置,之后再把堆的范围减少一进行一次向下调整,然后再重复以上内容。

def dui_sort(li):
    n=len(li)#获取长度
    for i in range((n-2)//2,-1,-1):#找到最后的非叶子节点,然后依次向前
        sort(li,i,n-1)#进行向下调整
    for i in range(n-1,-1,-1):#i是堆最后的元素
        li[0],li[n-1]=li[n-1],li[0]#互换位置
        sort(li,0,i-1)#向下调整

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/430891.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同&#xff1f; 制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别&#xff1a; 硬度与耐磨性&#xff1a;UV树脂具有较高的硬度和耐磨性&#xff0c;能够有效保护耳机内部零件&#xff0c;延长耳机使用寿命。而塑料材质相…

四川首例强生全视人工晶体在成都爱尔眼科医院成功植入

【2024年3月1日&#xff0c;成都】全国首批、四川首例强生全视TECNIS Symfony™ Toric IOL植入手术在成都爱尔眼科医院成功开展&#xff0c;手术由爱尔眼科四川省区白内障学组组长、成都爱尔眼科医院副院长巫雷教授执刀。TECNIS Symfony™ Toric IOL的成功运用&#xff0c;不仅…

每日学习总结20240301

20240301 1. strchr VS strrchr strchr和strrchr是C语言标准库中的字符串处理函数&#xff0c;用于在字符串中查找特定字符的位置。 1.1 strchr函数 strchr函数用于在字符串中查找第一次出现指定字符的位置&#xff0c;并返回该位置的指针。函数原型如下&#xff1a; char…

数据库管理-第158期 Oracle Vector DB AI-09(20240304)

数据库管理158期 2024-03-04 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&#xff09;1 创建示例表2 添加过滤条件的向量近似查询示例1示例2示例3示例4示例5示例6示例7 总结 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&a…

保姆级GeoWebCache矢量瓦片切片流程

1矢量切片解决方案 1.1Geoserver配置geowebcache插件 参考文章 (53条消息) 独立安装geoservergeowebcache发布arcgis切片服务_itouch_ok的专栏-CSDN博客 1.将下载好的geoserver 2.19.3安装部署 将下载好的geowebcache 2.19.3的war包解压到 GeoServer 安装目录下./usr/loc…

【AI视野·今日CV 计算机视觉论文速览 第301期】Mon, 4 Mar 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 4 Mar 2024 Totally 74 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Point Could Mamba: Point Cloud Learning via State Space Model Authors Tao Zhang, Xiangtai Li, Haobo Yuan, Shunping …

单例服务拆分为分布式架构

将独立业务服务拆分为分布式 为啥会有这个想法&#xff1f;因为我要造锤子&#xff0c;拿着造好的锤子&#xff0c;去找锤子&#xff0c;没有造锤子的经验无法找一个造锤子的坑。 现有情况说明 单机软件&#xff1a;就是将软件安装在自己的电脑上&#xff0c;自己用的那种&…

关于Java并发多线程的一点思考

写在开头 在过去的2023年双11活动中&#xff0c;天猫的累计访问人次达到了8亿&#xff0c;京东超60个品牌销售破10亿&#xff0c;直播观看人数3.0亿人次&#xff0c;订单支付频率1分钟之内可达百万级峰值&#xff0c;这样的瞬间高并发活动&#xff0c;给服务端带来的冲击可想而…

linux kernel物理内存概述(五)

目录 概述 一、快速路径分配 1、get_page_from_freelist 2、rmqueue()函数 二、慢速路径分配 1、分配流程 三、direct_compact 概述 物理内存分配步骤 1、初始化,参数初始化 2、内存充足&#xff0c;快速分配 get_page_from_freelist 3、内存压力大&#xff0c;慢速…

DxO PhotoLab 7:影像之美,源于细节之魅 mac/win激活版

DxO PhotoLab 7是一款功能强大的专业摄影后期处理软件&#xff0c;专为摄影师设计&#xff0c;以帮助他们实现卓越的图像质量和效果。该软件以其卓越的算法和用户友好的界面&#xff0c;为摄影师提供了一个全面而灵活的解决方案&#xff0c;让每一张照片都能发挥出其最大的潜力…

HCIA-HarmonyOS设备开发V2.0证书

目录 一、不墨迹&#xff0c;上证书二、考试总结三、习题四、知识点五、坚持就有收获 HCIA-HarmonyOS Device Developer V2.0 开发者能力认证考试已通过。 一、不墨迹&#xff0c;上证书 一个多月的努力&#xff0c;验证了自己的学习成果&#xff0c;也认识到自己有待提升之处…

D-ID Studio:数字身份认证的新纪元

随着科技的飞速发展&#xff0c;数字身份认证已逐渐成为我们日常生活中不可或缺的一部分。在这个背景下&#xff0c;D-ID Studio以其前沿的技术和创新的解决方案&#xff0c;正引领着数字身份认证的新纪元。 D-ID Studio是一个功能强大的在线平台&#xff0c;专注于提供全面的…

区间dp-

间dp就是在区间上进行动态规划&#xff0c;求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个大区间上最优解的 dp 算法。 既然让我求解在一个区间上的最优解&#xff0c;那么我把这个区间分割成一个个小区间&#xff0c;求解每个小区间的最优解&#xff0c;…

在 Rust 中实现 TCP : 3. TCP连接四元组

连接四元组 我们的项目已经取得了很大的进展——接下来能够开始解决 TCP 协议的实现问题。下面将讨论 TCP 的一些行为及其各种状态。 在多任务操作系统中&#xff0c;各种应用程序&#xff08;例如 Web 服务器、电子邮件客户端等&#xff09;需要同时进行网络访问。为了区分这…

openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程

文章目录 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程236.1 Query执行流程236.1.1 调优手段之统计信息236.1.2 调优手段之GUC参数236.1.3 调优手段之底层存储236.1.4 调优手段之SQL重写 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程 S…

如何选择程序员职业赛道

目录 前言1 个人技能分析1.1 技术栈评估1.2 经验积累1.3 数据科学能力 2 兴趣与价值观2.1 用户交互与界面设计2.2 复杂问题解决与系统优化 3 长期目标规划4 市场需求分析4.1 人工智能和云计算4.2 前沿技术趋势 5 就业前景5.1 前端在创意性公司中的应用5.2 后端在大型企业中的广…

全面分析vcruntime140_1.dll无法继续执行代码的处理方法,3分钟修复vcruntime140_1.dll

如果系统弹出一个错误警告&#xff0c;指出“vcruntime140_1.dll无法继续执行代码”&#xff0c;这通常意味着您的Windows系统中缺失了一个关键的文件&#xff0c;或者该文件已损坏。​vcruntime140_1.dll​是随Visual C Redistributable for Visual Studio 2015, 2017和2019提…

【更新2022】各省数字经济水平测算 原始数据+结果 2011-2022

数据说明&#xff1a;参照赵涛等&#xff08;2020&#xff09;的文章&#xff0c;利用熵值法和主成分对省市数字经济水平进行测算&#xff0c;原始数据来自第五期北大数字普惠金融指数&#xff0c;含原始数据&#xff0c;以及熵值法、主成分两种测算结果。一、数据介绍 数据名…

无人机/飞控--ArduPilot、PX4学习历程记录(1)

本篇博客用来记录个人学习记录&#xff0c;存放各种文章链接、视频链接、学习历程、实验过程和结果等等.... 最近在整无人机项目&#xff0c;接触一下从来没有接触过的飞控...(听着就头晕)&#xff0c;本人纯小白。 目录 PX4、Pixhawk、APM、ArduPilot、Dronecode Dronekit…

Linux 设置快捷命令

以ll命令为例&#xff1a; 在 Linux 系统上&#xff0c;ll 命令通常不是一个独立的程序&#xff0c;而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义&#xff0c;比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令&#xff0c;你可以按…