数据结构之选择排序(堆排序)

news2025/2/23 12:57:06

选择排序

选择排序分为两种一个是堆排序
一个是简单选择排序
在这里插入图片描述

简单选择排序

在这里插入图片描述
就是从头到尾扫描一遍待排序元素找出最小的
最小的之前的数的往后一位,第一个空间空出来
把最小的元素存入
然后从第二个空间开始变为待排序元素
在这里插入图片描述
最后一个元素不用处理

代码实现

在这里插入图片描述

算法性能

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

堆排序

什么是堆?

在这里插入图片描述
这个不太能直接看得懂哈
为了便于理解我们复习一下
在这里插入图片描述
用二叉树解释堆
在这里插入图片描述

在这里插入图片描述
物理结构上看就是连续存储空间的数组
而从逻辑视角上看
其实是一个二叉树
我们可以把L(i)看为根节点L(2i)看为根节点左孩子,L(2i+1)看为根节点的右孩子
这样解释的话
大根堆不就是
每一个根节点大于左右孩子
小根堆解释每一个根节点小于其左右子树
可以自己看一下逻辑存储形式和逻辑形式的关联

怎么进行堆排序?

在这里插入图片描述
选择排序(找最大或者最小一个个填入呗),大根堆的最大不就是最头吗data[0]
现在关键是对于一个初始序列如何建立成大根堆找到那个最大值

建立大根堆

在这里插入图片描述
处理非终端节点,进行调整
非终端节点从i/2从后往前处理(为什么,因为后面的只有一个孩子,而从头开始的话,不稳定,有很多孩子,我的理解是这样的)
比如这个吧
先从4开始处理在这里插入图片描述
检查孩子,用完全二叉树的顺序存储的特性找对应数组8(2i),不符合,然后找右孩子,右孩子超出数组,没有让根节点和最大的孩子互换
在这里插入图片描述
就符合了
在这里插入图片描述
然后处理78呗
87>78互换
在这里插入图片描述
然后就是2号
在这里插入图片描述
也是互换
最后是根节点
在这里插入图片描述
53<87再和87互换
在这里插入图片描述
但是这里出现了一个问题 78>53却在53下面不符合大根堆特性
还要再进行一次互换53和78
在这里插入图片描述
到此结束大根堆的创建了

代码实现

在这里插入图片描述
HeadAdjust里面实现了一直向下坠的操作,直至符合大根堆的特性

在这里插入图片描述
举个例子吧k=1len=8
调整的是A[1]
对应的是53先把53存入A【0】
第二行代码
把i指向A[1]的左孩子
如果说A[1]有右孩子,且右孩子大于左孩子(A[2k+1]>A[2k])
i指向右孩子
如果A[0]>A[i],就是比左右孩子都大,符合大根堆直接退出进行
如果不是的话
else中的
把左孩子右孩子中最大的赋值给A【k】呗(这里是A[1])
然后k变成i,因为交换了值,所以现在要判断再下一个子树是否符合了
再循环,和新k(原k的左孩子或者右孩子)的左孩子右孩子对比,直至符合大根堆
最后就赋值呗

基于大根堆排序

在这里插入图片描述
选择堆头元素和堆尾元素互换!因为其他元素不变
所以对于新范围来说(取出最后一个已经排序好的)
值对根节点进行调整即可
在这里插入图片描述
每一遍都是这样,先堆头尾互换,再对堆头调整即可
在这里插入图片描述
进行n-1遍即可

代码实现

在这里插入图片描述

算法效率分析

在这里插入图片描述

建堆的时间复杂度O(n)
在这里插入图片描述
在这里插入图片描述
整个堆排序复杂度
在这里插入图片描述
稳定性:不稳定
在这里插入图片描述

总结

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】根据自定义曲线函数进行拟合

【参考】 官网 curve_fit示例与评估&#xff1a;拟合curve_fit使用矫正的R^2评估非线性模型&#xff1a;拟合评估其他&#xff1a; curve_fit()实现任意形式的曲线拟合-csdn拟合优度r^2-csdn 官网示例 拟合函数&#xff1a; f(x)ae−bxcf(x)ae^{-bx}cf(x)ae−bxc import m…

Git——IDEA集成Git(详细)

目录 一、配置Git忽略文件 1.1 为什么忽略&#xff1f; 1.2 怎么忽略&#xff1f; 二. IDEA定位Git程序&#xff08;准备环境&#xff09; 三、IDEA操作Git 3.1 初始化Git本地库、添加暂存区、提交本地库 3.2 切换版本 3.3 创建分支 3.4 切换分支 3.5 合并分支 3.5.1…

存储模块 --- Cache

Cache 高速缓冲存储器 内存一般采用SDRAM芯片&#xff0c;对内存的访问肯定是不及CPU的速度的&#xff0c;通常说内存访问要比CPU的速度慢的多。也就是说内存拖后腿了。 CPU访问内存并不是完全随机的。 在某个时间段内&#xff0c;CPU总是访问当前内存地址的相邻内存地址&…

数理统计笔记5:参数估计-区间估计

引言 数理统计笔记的第5篇先介绍了参数估计的区间估计。包括单总体均值、单总体比例、单总体方差以及两总体均值之差、两总体方差之比几种常见的情况。 引言总体均值的置信区间&#xff08;σ2\sigma^2σ2已知&#xff09;-Z法总体均值的置信区间&#xff08;σ2\sigma^2σ2未知…

【Call for papers】SP-2023(CCF-A/网络与信息安全/2022年12月2日截稿)

文章目录1.会议信息2.时间节点Since 1980, the IEEE Symposium on Security and Privacy has been the premier forum for presenting developments in computer security and electronic privacy, and for bringing together researchers and practitioners in the field. The…

whylogs工具库的工业实践!机器学习模型流程与效果监控 ⛵

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; 机器学习实战系列&#xff1a;https://www.showmeai.tech/tutorials/41 &#x1f4d8; 本文地址&#xff1a;https://www.showmeai.tech/article-detail/395 &#x1f4e2; 声明&#xff1a;版权所有&#xff0c;转…

如何理解相位噪声与时间抖动的关系?

每当介绍相位噪声测试方案时&#xff0c;都会提到时间抖动&#xff0c;经常提到二者都是表征信号短期频率稳定度的参数&#xff0c;而且是频域和时域相对应的参数。正如题目所示&#xff0c;相位噪声与时间抖动有着一定的关系&#xff0c;那么相噪是与哪种类型的抖动相对应&…

葡萄糖-聚乙二醇-醛基/羟基 Glucose-PEG-CHO/OH

葡萄糖-聚乙二醇-醛基Glucose-PEG-CHO 羰基中的一个共价键跟氢原子相连而组成的一价原子团&#xff0c;叫做醛基&#xff0c;醛基结构简式是-CHO&#xff0c;醛基是亲水基团&#xff0c;因此有醛基的有机物&#xff08;如乙醛等&#xff09;有一定的水溶性。 葡萄糖-聚乙二醇…

ILRuntime热更的小技巧

文章目录前因后果前因 因为ILRuntime热更项目直接打包出来的DLL不能放置到AssetBundle里面打包所以我看网上的代码都是读取DLL的bytes然后放置到一个text文件里面后缀是bytes public class DefaultPath {public static string ProjectRootPath Environment.CurrentDirectory…

超市便利店微信小程序引流拉新_分享超市便利店微信小程序开发的作用

作为消费主力的年轻人&#xff0c;习惯用手机。习惯在手机下单&#xff0c;享受足不出户的方便快捷。 再加上疫情反复&#xff0c;线上购物&#xff0c;无接触配送显得更安全卫生。 再这样的市场环境下&#xff0c;做一个线上的超市小程序&#xff0c;就能解决很多问题&…

SpringCloud学习笔记(三)

文章目录SpringCloud学习笔记(一)1.Ribbon 概述2.负载均衡3.Ribbon 快速入门3.1 本次调用设计图3.2 项目搭建3.3 创建 provider-1和provider-23.4 编写 provider-1 和 provider-23.5 创建 consumer3.6 编写 consumer 的启动类3.7 编写 consumer 的 ConsumerController3.8 启动测…

83.Django项目中使用验证码

1. 概述 ​ 验证码&#xff08;CAPTCHA&#xff09;是“Completely Automated Public Turing test to tell Computers and Humans Apart”&#xff08;全自动区分计算机和人类的图灵测试&#xff09;的缩写&#xff0c;是一种区分用户是计算机还是人的公共全自动程序。可以防止…

分布式节能聚类算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

MySQL隔离级别的底层理解(MVCC+锁)

MySQL事务的隔离级别和并发的关系 mysql是一个C/S架构的软件, 也就意味着, 同一个mysql服务器可能同时存在很多的clients集合来访问. 此时最重要的是什么? 并发性. 并发时候的安全. 并发和数据库安全性本来就是相互矛盾的。要保证更好的安全性最好的方式是什么? 完全舍弃并…

云原生系列 四【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

最详细的Keycloak教程:Keycloak实现手机号、验证码登陆——(一)Keycloak的下载与使用

目录一、 简介二、Keycloak下载与启动三、配置国际化内容一、 简介 接触keycloak已经半个多月了&#xff0c;主要是为了用来集成现已有的项目&#xff0c;也是弄得头大&#xff0c;代码不负脱发人&#xff0c;也是有点小成果了&#xff0c;在这里把自己的这点小小经验分享给大…

CMOS IC功耗类型及其影响因素

目录 概述 开关功耗&#xff08;Switch Power&#xff09; 内部功耗&#xff08;Internal Power&#xff09; 漏电功耗&#xff08;Leakage Power&#xff09; 工艺库相关 开关功率相关信息 内部功耗相关信息 漏电功耗相关信息 例子 概述 该部分对IC功耗的类型进行介绍 先总体来…

安装黑苹果常见问题总结

黑苹果字体模糊&#xff1f; 由于macOS使用了HiDPi技术以达到更高的每英寸像素率&#xff0c;即缩放&#xff0c;因此普通显示器只要不是4k分辨率&#xff0c;安装黑苹果后一定会遇到字体模糊的问题&#xff0c;解决方法可以阅读我往期发布的文章。 为什么用iStat Menus无法检…

期末前端web大作业:用DIV+CSS技术设计的动漫网站——火影忍者6页 带报告

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 网页设计作业 | 动漫网页设计 | 动漫网页设计成品 | 动漫网页设计成品模板 | 简单漫画网页设计成品 | HTML期末大学生网页设计作业 HTML&#xff1a;结…

深度学习第四课——卷积神经网络(week 1)

目录 一、前言 1.1 卷积 1.2 其他滤波器 1.3 Padding 1.3.1 解释 1.3.2 填充多少像素的选择 1.4 卷积步长 1.5 三维卷积 1.6 单层卷积网络 1.7 深度卷积神经网络的一个示例 1.8 池化层 1.8.1 最大池化 1.8.2 平均池化 1.8.3 总结 1.9 卷积神经网络示例 1.10 为…