数据结构:选择排序
上一篇我们讲了插入排序这一篇我们来讲选择排序。因为堆排序之前我们有详细讲过所以这里只给出堆排序的思路有兴趣的可以看一看。选择排序选择排序就是从数组中选出最小值和最大值最小值放在第一个位置最大值放在最后一个位置依次执行直到排成有序数组为止。直接选择排序直接选择排序就是从begin到end范围中获取最大值和最小值将最小值放到begin位置最大值放到end位置。依次执行直到排成有序数组为止。思路比如说我们有以下数组我们把数组起始位置作为begin末尾作为end从中找出最小值mini和最大值maxi。我们将最小值mini位置和begin位置数据交换一下然后将最大值maxi位置和end位置数据交换一下使得最小值放到begin位置最大值放到end位置。然后beginend- -再从beign到end范围中找出最小值mini和最大值maxi。将mini和begin数据交换maxi和end数据交换。然后beginend- -继续从begin到end范围中找最小值和最大值。此时我们发现maxi在begin位置如果我们继续直接交换mini和beginmaxi和end就会发生这样一件事。我们发现最小值没有来到begin位置最大值也没有到end位置这是为什么呢maxi在begin位置的时候我们先交换的是begin和mini位置的数据这会导致maxi被交换到了mini的位置。因此当begin maxi的时候我们要让maxi mini这步的意义是存储begin被交换后maxi当前所处的位置这样end和maxi交换才不会出错。## 代码实现综上所述我们排序的循环条件是begin end当end begin的时候则说明排序结束了。然后初始情况下begin 0end n - 1;每次找到最小值最大值并放到beginend位置后beginend–。接下来我们定义mini和maxi我们让它们一开始等于begin然后从begin 1到end位置遍历一遍找最大值和最小值。因为我们是先将最小值放到begin处所以要判断begin maxi是否成立如果成立则让maxi mini记录交换后最大值的位置。如果我们是先将最大值放到end处则需要判断end mini成立则让mini maxi。然后将mini处数据和begin处交换maxi处数据和end处交换。这个代码就写好了。我们来简单测试一下。结果符合预期说明代码没什么问题。时间复杂度该算法嵌套了两层循环外层因为是两边同时查找循环次数缩短到了 n/2内层循环总次数也相当于一个公差为 -2 的等差数列之和总的来说无论什么情况该算法时间复杂度为 O(n2)。堆排序如果有兴趣的可以看看这篇文章详细内容不再赘述。数据结构:堆排序堆排序是利用堆的思想来进行排序的算法将原数组通过向上/向下调整算法调整成一个大堆然后堆顶和堆底元素数组开头和末尾进行交换数组大小 size–再调整前 size 个元素保证成为一个大堆结构循环往复直到 size 0排序结束。voidSwap(int*x,int*y){inttmp*x;*x*y;*ytmp;}//向下调整算法voidAdjustDown(int*arr,intparent,intn){intchildparent*21;//左孩子while(childn){if(child1narr[child1]arr[child])child;if(arr[parent]arr[child]){Swap(arr[parent],arr[child]);parentchild;childparent*21;}elsebreak;}}//向上调整算法AdjustUp(int*arr,intchild){intparent(child-1)/2;while(child0){if(arr[parent]arr[child]){Swap(arr[parent],arr[child]);childparent;parent(child-1)/2;}elsebreak;}}//堆排序voidHeapSort(int*arr,intn){//建大堆for(inti(n-1-1)/2;i--;i0){AdjustDown(arr,i,n);}//排序while(n0){//交换堆顶和堆底元素Swap(arr[0],arr[n-1]);n--;AdjustDown(arr,0,n);}}

相关新闻

3个维修隐坑|东莞笔记本插耳机仍外放自查,80%不用更换声卡

3个维修隐坑|东莞笔记本插耳机仍外放自查,80%不用更换声卡

1. 前言日常办公、网课学习时,笔记本音频异常的情况时有发生。明明耳机已经插紧,机身扬声器依旧持续发声,耳机完全没有音频输出。不少用户分不清软件故障和硬件损坏,直接选择送修。结合东莞本地长期接修的案例来看,这类…

2026/11/3 20:04:00 阅读更多 →
2026华为OD面试题076:表达式括号匹配

2026华为OD面试题076:表达式括号匹配

题目描述 给一个数学表达式,比如 (1+(2+3)*(3+(8+0))+1-2),今天不算它的值,只看括号用得对不对。 括号里面的表达式可能有空格、可能有错误,这些都不管,只关心括号本身配不配对。 输入描述:给出一行表达式,长度不超过 100。 输出描述:如果括号匹配正确,输出括号的…

2026/11/7 9:44:15 阅读更多 →
【中国方言题库|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致

【中国方言题库|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致

本地应用最容易出现的状态问题,并不是“数据完全没保存”,而是两套状态不同步:用户刚收藏题目,当前按钮已经变色,但返回首页统计仍是旧数字;删除错题后列表消失,重新启动又回来;设置…

2026/11/11 17:52:06 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻