news 2026/8/22 18:00:13

排序-选择排序(Selection Sort)冒泡排序(Bubble Sort)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
排序-选择排序(Selection Sort)冒泡排序(Bubble Sort)

目录

前言:

冒泡排序思路:

核心思想

时间复杂度:O(n^2)

代码如下:

选择排序思路

核心思想

时间复杂度:O(n^2)

代码如下:

选择排序优化思路:

优化代码如下:

排序稳定性比较

结语:


前言:

选择排序与冒泡排序比较简单,为补齐排序,就讲一下思路与时间复杂度,给一下代码。

然后补充一下所以排序的稳定性。

其他排序:

快速排序:排序-快速排序(Quick sort)(基础版)-CSDN博客

归并排序:排序-归并排序(Merge Sort)-CSDN博客

插入排序:排序—插入排序(Insertion Sort)-CSDN博客

希尔排序:排序-希尔排序(Shell Sort)-CSDN博客

冒泡排序思路:

核心思想

重复遍历数组,相邻元素两两比较,顺序错误则交换。每轮遍历后,最大元素"浮"到末尾。

冒泡排序有教学价值,但是时间复杂度比较高,使用少。

时间复杂度:O(n^2)

代码如下:

void BubbleSort(int* a, int n) { for (int j = 0; j < n; j++) { // 单趟 int flag = 0; for (int i = 1; i < n - j; i++) { if (a[i - 1] > a[i]) { Swap(&a[i - 1], &a[i]); flag = 1; } } if (flag == 0) { break; } } }

选择排序思路

核心思想

每轮从未排序区间选出最小元素,放到已排序区间的开头。

时间复杂度:O(n^2)

不管怎么样时间复杂度都比较高,因为选择排序一直都是选择最小的拿出,

代码如下:

void SelectionSort(int* a, int n) { for (int i = 0; i < n-1; i++) { int Min = i; for (int j = i + 1; j < n; j++) { if (a[Min] > a[j]) { Min = j; } } swap(a[i], a[Min]); } }

选择排序优化思路:

普通单向选择排序

每一轮只找最小值,放到数组最左边已排序位置,只处理一端。

这份双向选择排序逻辑

  1. 两个指针:begin(左端待排序起点),end(右端待排序终点)
  2. 一轮遍历区间[begin, end],同时找出:
    • mini:当前区间最小值下标
    • maxi:当前区间最大值下标
  3. 把最小值交换到a[begin];把最大值交换到a[end]
  4. begin++左边界右移,end--右边界左缩,下一轮处理中间剩下的区间
  5. while(begin < end)循环直到左右指针相遇,排序完成

优化代码如下:

void SelectSort(int* a, int n) { int begin = 0, end = n - 1; while (begin < end) { int mini = begin, maxi = begin; for (int i = begin + 1; i <= end; ++i) { if (a[i] > a[maxi]) { maxi = i; } if (a[i] < a[mini]) { mini = i; } } Swap(&a[begin], &a[mini]); Swap(&a[end], &a[maxi]); ++begin; --end; } }

排序稳定性比较

我这里只比较比较常见的七大排序:冒泡,快速,选择,插入,希尔,堆,归并。

排序稳定性
插入排序稳定
希尔排序不稳定
选择排序不稳定
堆排序不稳定
冒泡排序稳定
快速排序不稳定
归并排序稳定

结语:

谢谢你的观看,希望可以给你提供帮助!!!

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

构建安全测试环境:从密钥管理到Mock服务的航空业实践

这次我们来看一个与航空业软件测试相关的技术场景&#xff1a;ANA Airlines&#xff08;全日空航空&#xff09;在测试环境中使用 live key&#xff08;生产密钥&#xff09;进行互联网购票功能验证。这不是某个具体的开源项目&#xff0c;而是一个在软件测试、持续集成和航空系…

作者头像 李华
网站建设 2026/8/22 17:53:57

B站弹幕屏蔽词批量管理实战:从扫码登录到一键套用词包

B站弹幕屏蔽词批量管理实战&#xff1a;从扫码登录到一键套用词包 【免费下载链接】bilibili_blacklist A website to share and manage their bilibili danmaku blacklist. 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili_blacklist 弹幕剧透和刷屏总挡在眼前&…

作者头像 李华
网站建设 2026/8/22 17:49:34

【译】挑选、管理并充分发挥你的模型

您打开模型选择器&#xff0c;划过十多个选项&#xff0c;随即停了下来。这些模型有什么区别&#xff1f;到底该选用哪一个&#xff1f;当您已经发送了几百条消息之后&#xff0c;还剩下多少可用上下文容量&#xff0c;才会开始出现性能衰减&#xff1f;我们都遇到过这类情况。…

作者头像 李华
网站建设 2026/8/22 17:49:24

KMS_VL_ALL_AIO:三步搞定 Windows 和 Office 激活,自动续期全包含

KMS_VL_ALL_AIO&#xff1a;三步搞定 Windows 和 Office 激活&#xff0c;自动续期全包含 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 演示前 3 分钟&#xff0c;客户让你用 Word 改份文档&a…

作者头像 李华
网站建设 2026/8/22 17:48:57

一文讲透 BBDown:B站视频下载器实操手册

一文讲透 BBDown&#xff1a;B站视频下载器实操手册 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 整理 B 站上一套老教程的时候&#xff0c;我想把全套视频连字幕带分 P 标签存到本地…

作者头像 李华
网站建设 2026/8/22 17:46:18

生成式递归推理:从串行思考到并行规划的技术突破

你肯定遇到过这种情况&#xff1a;面对一个复杂问题&#xff0c;比如调试一段代码、设计一个系统架构&#xff0c;或者规划一个项目&#xff0c;你的大脑会不自觉地“递归”起来&#xff1a;先想第一步&#xff0c;然后基于第一步的结果想第二步&#xff0c;再基于前两步的结果…

作者头像 李华