news 2026/4/25 20:34:44

简单选择排序的核心逻辑是:在每趟排序中从未排序的部分选出最小(或最大)元素,将其与该部分的第一个元素交换位置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单选择排序的核心逻辑是:在每趟排序中从未排序的部分选出最小(或最大)元素,将其与该部分的第一个元素交换位置

简单选择排序的核心逻辑是:在每趟排序中从未排序的部分选出最小(或最大)元素,将其与该部分的第一个元素交换位置,从而逐步构建有序序列。通过 n-1 趟选择,完成整个数组的排序。

voidSelectSort(intdata[],intn){inti,j,k,tmp;for(i=0;i<n-1;i++){k=i;// 假设第i个位置就是最小值的位置for(j=i+1;j<n;j++)/* 找出最小关键字的下标 */if(data[j]<data[k])k=j;if(k!=i){// 若最小值不在第i位,则交换tmp=data[i];data[i]=data[k];data[k]=tmp;}}}

性能分析如下:

  • 比较次数:固定为n(n−1)2\frac{n(n-1)}{2}2n(n1),时间复杂度为O(n2)O(n^2)O(n2),不随输入数据分布变化。
  • 移动次数
    • 最好情况(已有序):0 次;
    • 最坏情况(逆序):每趟都发生交换,共3(n−1)3(n-1)3(n1)次移动(每次交换3次赋值)。
  • 稳定性:不稳定。例如,当有相同关键字的元素时,交换可能导致它们相对顺序改变。
  • 空间复杂度O(1)O(1)O(1),仅使用常量额外空间。
  • 简单选择排序是不稳定的,原因在于它在每趟选择中将最小元素与未排序部分的首元素进行直接交换,而不管这两个元素是否具有相同的值。这种交换可能改变相同关键字元素之间的相对顺序,从而破坏稳定性。

🔍 举例说明:

假设有一个待排序的数组,其中包含两个相同的元素5a5b(下标 a、b 用于区分先后顺序):

原始序列:[5a, 2, 5b, 1]

我们希望排序后相同元素5a5b的相对位置保持不变(即5a仍在5b前面),才能称为稳定排序。

执行选择排序过程:
  • 第1趟:从[5a, 2, 5b, 1]中找最小值 →1(下标3)

  • 1与第一个元素5a交换:

    结果:[1, 2, 5b, 5a]

此时,原本在后面的5a被换到了最后,而5b却排在了前面。

  • 最终结果中:5b出现在5a前面,改变了相同关键字元素的相对顺序

👉 因此,该算法是不稳定的


✅ 总结

尽管选择排序逻辑清晰、空间效率高,但由于其通过“交换”而非“插入”来调整位置,容易打乱相等元素的原始次序,所以不具备稳定性

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:40:41

火山引擎AI大模型与腾讯混元OCR应用场景对比分析

火山引擎AI大模型与腾讯混元OCR应用场景对比分析 在企业数字化转型的浪潮中&#xff0c;如何高效地将纸质文档、发票、合同乃至视频字幕转化为可处理的结构化数据&#xff0c;已成为金融、政务、医疗等行业面临的核心挑战。传统OCR系统虽然早已落地应用&#xff0c;但往往依赖多…

作者头像 李华
网站建设 2026/4/16 9:11:17

C# 12拦截器实战指南(方法调用增强技术大揭秘)

第一章&#xff1a;C# 12拦截器概述C# 12 引入了拦截器&#xff08;Interceptors&#xff09;这一实验性功能&#xff0c;旨在为源生成器提供更深层次的代码干预能力。拦截器允许开发者在编译时将特定方法调用重定向到另一段实现代码&#xff0c;而无需修改原始调用语句。该机制…

作者头像 李华
网站建设 2026/4/18 10:14:02

【C# 12顶级语句深度解析】:复杂项目中的最佳实践与性能优化策略

第一章&#xff1a;C# 12顶级语句概述C# 12 引入的顶级语句&#xff08;Top-Level Statements&#xff09;极大简化了应用程序的入口点定义&#xff0c;使开发者能够以更简洁的方式编写控制台或小型应用&#xff0c;无需显式定义类和主方法。这一特性特别适用于学习、原型开发和…

作者头像 李华
网站建设 2026/4/18 15:22:57

谷歌镜像搜索引擎优化技巧:精准查找HunyuanOCR资料

谷歌镜像搜索引擎优化技巧&#xff1a;精准查找HunyuanOCR资料 在AI驱动文档智能的今天&#xff0c;企业对高效、准确的文字识别能力需求日益增长。然而&#xff0c;现实却常令人头疼——许多先进的OCR模型因网络限制或部署复杂而难以触达&#xff0c;开发者往往卡在“找资源”…

作者头像 李华
网站建设 2026/4/18 6:48:09

【C#高级编程技巧】:using别名与元组的高效结合使用方法揭秘

第一章&#xff1a;C# using别名与元组的核心概念解析在C#开发中&#xff0c;using别名和元组&#xff08;Tuple&#xff09;是提升代码可读性与表达能力的重要语言特性。它们分别解决了命名冲突与多值返回的常见问题&#xff0c;广泛应用于现代.NET开发实践中。using别名的使用…

作者头像 李华
网站建设 2026/4/19 23:23:50

双指针专题(八):步长跳跃的艺术——「串联所有单词的子串」

场景想象&#xff1a; 你有一串很长的珍珠项链&#xff08;字符串 s&#xff09;&#xff0c;和一堆散落的、长度相同的宝石&#xff08;单词数组 words&#xff09;。 你需要从项链上截取一段&#xff0c;使得这段子串 恰好 由所有的宝石串联而成&#xff08;顺序不限&#…

作者头像 李华