【数据结构】选择排序——选择排序 和 堆排序
选择排序 和 堆排序
- 一、选择排序
- 选择排序的思路及其代码
- 选择排序的弊端
- 二、堆排序
- 三、速度对比
- 同时排10000个数
- 同时排100000个数
- 同时拍500000个数
- 堆排 1 亿个数
一、选择排序
选择排序的思路及其代码
选择排序思路很简单
就是经过将数组遍历选择最小值
将最小值位置的数与数组最前面位置的数进行交换
如此反复,完成排序

为了提高效率我们在一次遍历过程中同时找最大和最小值
代码如下:
//选择排序
void SelectSort(int* a, int n)
{int maxi = n - 1;int mini = 0;while (mini < maxi){//找出最大最小值的下标int max = maxi;int min = mini;for (int i = mini; i <= maxi; i++){if (a[i] > a[max]){max = i;}if (a[i] < a[min]){min = i;}}//将最大最小值进行更新,将最大最小值放到数组两边Swap(&a[mini], &a[min]);//若最大值在原最小值的位置,将位置更新if (max == mini){max = min;}Swap(&a[maxi], &a[max]);maxi--;mini++;}
}
运行结果:

选择排序的弊端
因为无论数组中原数组是如何排列
选择排序都要遍历数组
所以它的最好与最坏的情况下
时间复杂度都是 O(N ^ 2)
效率低下,正常情况下是不会使用这个排序的
二、堆排序
以下的链接又对堆和堆排序的讲解:
堆以及堆排序
下面我就直接把代码贴出来:
//向下调整(建大堆)
void AdjustDown(int* a, int parent, int n)
{//左孩子int child = parent * 2 + 1;while (child + 1 < n){//先找左右孩子中大的一个if (child + 1 < n && a[child] < a[child + 1]){child++;}//将父亲节点与孩子节点进行比较,将大的移到父亲节点if (a[parent] < a[child]){Swap(&a[parent], &a[child]);parent = child;child = parent * 2 + 1;}else{break;}}
}//堆排序
void HeapSort(int* a, int n)
{//向下调整建堆for (int i = (n - 1 - 1) / 2; i >= 0; i--){AdjustDown(a, i, n);}//进行堆排序int size = n - 1;while (size > 0){//先将堆的第一个数与最后一个数交换Swap(&a[0], &a[size--]);//向下调整AdjustDown(a, 0, size);}
}
运行结果:

堆排序的时间复杂度为 O(N * logN)
三、速度对比
同时排10000个数

同时排100000个数

同时拍500000个数

排序到这里选择排序就已经非常慢了
我们笔记本是 i9 的 cpu 配置还算可以
跑的时候风扇已经呜呜转了
堆排 1 亿个数

相关文章:
【数据结构】选择排序——选择排序 和 堆排序
选择排序 和 堆排序 一、选择排序选择排序的思路及其代码选择排序的弊端 二、堆排序三、速度对比同时排10000个数同时排100000个数同时拍500000个数堆排 1 亿个数 一、选择排序 选择排序的思路及其代码 选择排序思路很简单 就是经过将数组遍历选择最小值 将最小值位置的数与数…...
P11229 [CSP-J 2024] 小木棍
[CSP-J 2024] 小木棍 题目描述 小 S 喜欢收集小木棍。在收集了 n n n 根长度相等的小木棍之后,他闲来无事,便用它们拼起了数字。用小木棍拼每种数字的方法如下图所示。 现在小 S 希望拼出一个正整数,满足如下条件: 拼出这个数…...
【学习笔记】SAP ABAP——OPEN SQL(一)【SELECT语句】
SELECT语句简介 SELECT <lines> <columns> FROM <db> WHERE <condition>其中代表查询的件数,代表查询的字段名 SELECT SINGLE SELECT SINGLE <cols> FROM <db> WHERE <condition>该语句用于从数据库表中查询单条数据 …...
SQL注入(1)
1.数字型注入 例如PHP代码 “ Select username from users where id”.$_GET[id] 可以注意到,用户的输入ID字段没有任何过滤的,被直接拼接在了SQL查询语句中,由于ID没有被引号包裹ÿ…...
在AI时代,如何解决人的工作岗位被AI替代的问题?
在AI时代,工作岗位被AI替代的问题确实是一个重要的社会课题。随着技术的不断进步,许多传统的工作变得自动化,这带来了效率的提升,但也引发了就业方面的挑战。要应对这一问题,我们可以从以下几方面入手: 促进…...
Linux命令--paste
简介 paste命令用于合并文件行 参数说明 -d: 自定义间隔符,默认为tab -s:串行处理,非并行 示例 将两个文件,按照行合并 demo1.conf内容如下: name domain ip area user password roledemo2.conf内容如下 test t…...
数据结构模拟题[九]
数据结构试卷(九) 一、选择题 (30 分) 1.下列程序段的时间复杂度为( )。 for(i0 ; i<m ; i) for(j0 ; j<t ; j) c[i][j]0 ; for(i0 ; i…...
2024年10月国产数据库大事记-墨天轮
本文为墨天轮社区整理的2024年10月国产数据库大事件和重要产品发布消息。 目录 2024年10月国产数据库大事记 TOP102024年10月国产数据库大事记(时间线)产品/版本发布代表厂商大事记信创数据库上市公司2024年Q3财报 达梦数据:2024年前三季度…...
Andon 业务流程业务开发陷阱----从真实用户与管理者视角逻辑差异
Q : Andon 问题识别归类(就是问题的3层细化),是在事中,还是在事后? A : 不存在事中就细化归类,有悖于生产问题解决流程。 从操作员的角度来看,他们在事中可能只能识别出存在质量问题,但无法进行具体的质量问题编号…...
Python闭包|你应该知道的常见用例(上)
引言 在 Python 编程语言中,闭包通常指的是一个嵌套函数,即在一个函数内部定义的另一个函数。这个嵌套的函数能够访问并保留其外部函数作用域中的变量。这种结构就构成了一个闭包。 闭包在函数式编程语言中非常普遍。在 Python 中,闭包特别有…...
printf影响单片机中断速度
printf是我们常用的调试程序的手段,在第一版程序中,经常会使用printf来验证程序是否工作正确。这样的调试手段应该在正式版的程序发布前注释掉或者删除。而且不当地使用printf也会带来某些功能性问题,例如,在某项目中,…...
JavaScript 23种经典设计模式简介
23种JavaScript经典设计模式 JavaScript经典设计模式 通过之前的学习,我们知道设计模式是一种解决代码组织、代码复用和代码可维护性等问题的技术方法。它通过将代码以特定的方式组织起来,使代码结构更加清晰、可读性更高、易于维护和扩展。为了在开发…...
位运算相关算法
一、异或运算介绍 1、性质介绍 异或运算(XOR,Exclusive OR)是一种位运算符。对于两个位进行异或操作,当且仅当这两个位不同时,结果为 1;如果相同,则结果为 0。 A B A^B00001 1 101110 任何数…...
解决:无法在此设备上激活Windows因为无法连接到你的组织的激活服务器
问题: 桌面右下角会出现这个东西👇 在设置里查看激活状态就会看到👇 解决方法 : 1.打开CMD 搜索CMD,然后以管理员身份运行 2.设置 KMS服务器 1)命令行输入: slmgr /skms kms.03k.org 然后…...
【Spring】——SpringBoot项目创建
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 引入 一:介绍 二:Spring Boot项目创建 0:项目目录 1:…...
聊一聊:ChatGPT搜索引擎会取代谷歌和百度吗?
当地时间 10 月 31 日,OpenAI 正式推出了 ChatGPT 搜索功能,能实时、快速获取附带相关网页来源链接的答案。这一重大升级标志着其正式向谷歌的搜索引擎霸主地位发起挑战。 本周五我们聊一聊: 欢迎在评论区畅所欲言,分享你的观点~ …...
分布式中常见的问题及其解决办法
分布式中常见的问题及其解决办法 一、多个微服务要操作同一个存储在redis中的变量,如何确保这个变量的正确性 答: 在多个微服务操作同一个存储在Redis中的变量时,可以采取以下措施来确保变量的正确性: 1、使用Redis的事务&…...
HTML 基础标签——多媒体标签<img>、<object> 与 <embed>
文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…...
word mathml 创建粗体字母快捷键
在 mathml 中达到latex中 \mathbf{A} 的效果 由于word本身不支持这个命令,所以打算用快捷键实现 快捷键的功能是加粗光标前一个字目 1. Alt F8 打开宏,如果打不开可以尝试 Alt Fn F8 2. 输入 BoldPreviousCharacter 新建宏: Sub Bold…...
ROOT添加用户提示权限不够
有个系统已经上线过了,之后测评整改要求不能用root启动中间件,我就想着添加一个普通用户,赋予指定目录权限,然后启动应用就行了 。 结果用root用户创建账号提示权限不够,确认了几遍,是root 命令前面加sud…...
Python爬虫实战:Python + curl_cffi 穿透 Adidas 新品榜:TLS 指纹伪装实战!
㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐ 🉐福利: 一次订阅后,专栏内的所有文章可永久…...
构建AI应用时如何借助Taotoken实现模型的灵活选型与降级
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 构建AI应用时如何借助Taotoken实现模型的灵活选型与降级 对于正在开发AI应用的产品团队而言,模型服务的稳定性和成本效…...
效率翻倍!OrCAD Capture CIS创建复杂元器件库的实战技巧:LM358与多Part器件管理
效率翻倍!OrCAD Capture CIS创建复杂元器件库的实战技巧:LM358与多Part器件管理 在电子设计领域,元器件库的管理水平直接影响设计效率。许多工程师在使用OrCAD Capture CIS时,面对LM358这类多Part器件或更复杂的异构元件时&#x…...
2026年六大主流AI变声器软件排名推荐!
随着AI语音技术持续迭代升级,AI变声器不再是单一的娱乐工具,广泛应用于游戏开黑、直播互动、短视频配音、音频创作、隐私语音沟通等多个场景。目前市面上变声软件品类繁杂,涵盖移动端、PC端、免费开源、专业付费等不同类型,普通用…...
日语语音识别终极指南:5个技巧让Faster-Whisper-GUI准确率提升300%
日语语音识别终极指南:5个技巧让Faster-Whisper-GUI准确率提升300% 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 想要在本地高效处理日语音频转写和字幕生成吗&am…...
科研学术篇---论文搜索方法
高效搜集和研读论文,是构建扎实知识体系的基石。要想做到“高效”与“高质”并重,需要把整个过程当作一个闭环系统来优化——从目标锁定、来源筛选、检索策略,到快速粗筛、深度内化、持续追踪,每一步都有对应的工具和心法。下面逐…...
全球数据治理:合规与AI双引擎驱动
一、全球化数据治理进入“合规AI”双引擎驱动时代2026年,全球数据治理市场的竞争格局正在被两股力量重塑。一方面,各国数据主权法规持续收紧——中东多国强化数据本地化存储要求,欧盟AI治理法案进入实质性执行阶段,拉美个人数据保…...
vscode过滤文件
const fs require(fs); const { exec } require(child_process);// 在这里输入你的关键词,每行一个 const keywordsStr BV1wmXwBCEsZ BV1MR6wBREhY BV1DuoSYuEpX ; // // 将多行字符串按换行符分割,过滤掉空行 const keywords keywordsStr.trim()…...
山海再赴,探索向新|2026 第二届搜狐极限探索者大会盛大启航!
2025年6月5日,由搜狐主办的首届搜狐极限探索者大会在北京盛大举行。大会以“致敬极限探索者”(Salute to the Ultimate Explorers)为主题,汇聚中国上百位各极限运动领域顶尖的探索者、企业及明星嘉宾,通过巅峰演讲、深…...
Vue3 + Element Plus 项目里,用ECharts 5.4.3做个动态数据大屏(附完整代码)
Vue3 Element Plus 与 ECharts 5.4.3 构建企业级动态数据大屏实战 数据可视化大屏已成为现代企业监控业务指标、分析趋势的核心工具。本文将深入探讨如何基于最新的 Vue3 和 Element Plus 技术栈,结合 ECharts 5.4.3 的强大可视化能力,构建一个高性能、…...
