图解简单选择排序C语言实现

1 简单选择排序

简单选择排序(Simple Selection Sort)是一种基础且直观的排序算法,其核心思想是通过重复选择未排序部分中的最小(或最大)元素,并将其放到已排序部分的末尾,逐步完成整个序列的排序。

1.1 基本概念与原理

简单选择排序(Simple Selection Sort)是一种基于比较的原地排序算法,其核心思想是将待排序序列分为已排序和未排序两部分,通过不断选择未排序部分中的最小元素,并将其交换到已排序部分的末尾,逐步完成整个序列的排序。
该算法的主要特点包括:
‌不稳定排序‌:相同元素的相对位置可能在排序过程中改变
‌原地排序‌:不需要额外的存储空间
直观简单‌:算法逻辑易于理解和实现
选择排序的基本原理可以类比为"每次从剩余未排序元素中挑选最小的一个放到正确位置"。这种逐步选择最小元素的策略使得算法具有确定性,无论输入数据的初始顺序如何,其比较次数都是固定的。

1.2 算法执行过程

选择排序的具体执行步骤如下:
‌1.初始化阶段‌
(1)将整个数组视为未排序部分
(2)已排序部分初始为空
2‌.查找最小值阶段‌
(1)从当前未排序部分的第一个元素开始遍历
(2)记录当前最小元素的索引
‌3.比较交换阶段‌
(1)将当前元素与已记录的最小元素比较
(2)如果发现更小的元素,更新最小元素索引
4‌.位置交换阶段‌
(1)遍历完成后,将未排序部分的第一个元素与找到的最小元素交换
(2)此时已排序部分增加一个元素
‌5.迭代重复‌
(1)缩小未排序部分的范围
(2)重复步骤2-4,直到未排序部分只剩一个元素
执行示例
以数组[64, 25, 12, 22, 11]为例:
第一轮:找到最小值11,与64交换 → [11, 25, 12, 22, 64]
第二轮:在剩余部分找到最小值12,与25交换 → [11, 12, 25, 22, 64]
第三轮:找到最小值22,与25交换 → [11, 12, 22, 25, 64]
第四轮:找到最小值25,位置正确 → 排序完成

1.3 算法复杂度分析

时间复杂度
‌最坏情况‌:O(n²) - 需要进行n(n-1)/2次比较
‌最好情况‌:O(n²) - 即使输入已经有序,仍需相同数量的比较
‌平均情况‌:O(n²) - 比较次数与输入顺序无关
空间复杂度
‌空间复杂度‌:O(1) - 仅需常数级别的额外空间用于交换元素

1.4 C语言实现简单选择排序

#include <stdio.h>#define SORT_DATA_TYPE int/*** @brief 打印数据** @param arr 数组* @param n 数组元素个数*/
void print_array(int arr[], unsigned int n)
{unsigned int i;for (i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");
}/*** @brief 简单选择排序** @param arr 待排序的数组* @param n 数组元素个数*/
void simple_selection_sort(SORT_DATA_TYPE arr[], unsigned int n)
{int swap_flg;SORT_DATA_TYPE temp;unsigned int i;unsigned int j;for (i = 0; i < (n - 1); i++){for (j = (i + 1); j < n; j++){if (arr[j] < arr[i]){temp = arr[i];arr[i] = arr[j];arr[j] = temp;}print_array(arr, n); /* 查看每次排序结构,调试使用 */}}
}int main()
{SORT_DATA_TYPE arr[] = {1, 2, 3, 4};unsigned int n = sizeof(arr) / sizeof(arr[0]);printf("old arr : ");print_array(arr, n);simple_selection_sort(arr, n);printf("new arr : ");print_array(arr, n);return 0;
}


不同类型的数组直接将SORT_DATA_TYPE全部替换为需要的类型,然后删除多余的宏定义即可支持任意类型数组的简单选择排序。

1.5 简单测试

通过使用2个数组[4,3,2,1]及[1,2,3,4]演示最坏情况和最好情况简单选择排序的执行过程:
最坏情况
在这里插入图片描述
最坏情况需要进行n(n-1)/2次比较,也就是6次比较。可以使用如下图片演示这一过程:
在这里插入图片描述
最好情况
在这里插入图片描述
最好情况需要进行n(n-1)/2次比较,也就是6次比较。

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

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

相关文章

FPS游戏时,你的电脑都在干什么(CS2)

人物介绍&#xff1a;CPU > 你忠实的处理器 i5-13600KFGPU > 你花大价钱买的显卡 RTX3060&#xff08;不是自己的配置&#xff0c;自己的是XEON E5GTX1060&#xff0c;测不出来&#xff0c;上面是社区一个好心大哥的数据&#xff0c;较为精准&#xff09;&#…

MySQL完整重置密码流程(针对 macOS)

MySQL完整重置密码流程&#xff08;针对 macOS&#xff09; 1. 强制停止 MySQL 服务 sudo /usr/local/mysql/support-files/mysql.server stop sudo killall mysqld mysqld_safe # 确保所有进程停止2. 以安全模式启动&#xff08;跳过权限验证&#xff09; sudo /usr/local/my…

Python数据类型转换详解:从基础到实践

在Python编程中&#xff0c;数据类型转换是一项基础且频繁使用的操作。无论是处理用户输入、进行数值计算还是数据处理&#xff0c;都离不开类型转换。本文将系统介绍Python中的数据类型体系&#xff0c;详解类型转换的规则与实践技巧&#xff0c;帮助你在实际开发中灵活运用。…

智能制造——解读车企数字化转型构建高效经营管理数据治理体系【附全文阅读】

适应人群为车企数字化转型决策者、数据管理负责人、IT 部门从业者、财务及业务部门管理者。主要内容围绕车企数字化转型中经营管理数据治理体系构建展开,核心包括诊断背景(以经营管理数字化为切入点,聚焦财务业务在线化、零点月结等痛点,应对系统与数据问题);现状诊断(从…

STM32的UART奇偶校验注意

关键点&#xff1a;设置为9位数据位&#xff0c; STM32的UART奇偶校验注意_stm32串口奇校验初始化程序-CSDN博客https://blog.csdn.net/JacobFang/article/details/118993643 特此记录 anlog 2025年8月13日

Origin绘制正态分布直方图+累积概率图|科研论文图表教程(附数据格式模板)

免费查看完整教程(包括数据格式) ↑ ↑ ↑ 目录 本 期 导 读 No.1 理解图形 1 定义 2 图形特点 3 应用场景 No.2 画图教程 1 导入数据,绘制图形 2 设置绘图细节 本 期 导 读 直方图,以柱状高低直观展现各区间数据的分布密度,集中趋势、离散程度与异常…

Python入门第6课:文件操作之读写文本、CSV与JSON文件

Python入门第6课:文件操作之读写文本、CSV与JSON文件 作者: 蛋皮 标签: Python, 文件操作, 读写文件, 文本文件, CSV, JSON 在掌握了Python的基础语法、数据结构和函数之后,你的程序已经能够处理内存中的数据。但现实世界的数据通常存储在文件中。无论是用户的配置信息、日…

基于Uni-app+vue3实现微信小程序地图固定中心点范围内拖拽选择位置功能(分步骤详解)

一、功能概述与实现步骤1.1 功能需求显示地图并固定中心点标记绘制服务区域多边形边界实时检测拖拽后位置是否在服务区内提供位置确认和超出范围提示功能1.2 实现步骤分解第一步&#xff1a;初始化地图基础配置创建Map组件并设置基本属性定义服务区域多边形坐标设置地图初始中心…

《设计模式》抽象工厂模式

1.抽象工厂模式定义 抽象工厂模式&#xff08;Abstact Factory &#xff09;&#xff1a; 提供一个创建一系列相关或者相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 1.1 UML图&#xff1a;2.抽象工厂模式举例&#xff1a; 业务场景&#xff1a;需要实现一个数据访问…

git stash临时保存工作区

通过git stash 可以灵活管理临时修改&#xff0c;保持工作区整洁&#xff0c;是多人协作或多任务切换时的常用工具&#xff0c;主要用于临时保存工作区和暂存区修改的命令&#xff0c;常用于以下场景&#xff1a;&#xff08;1&#xff09;需要切换分支&#xff0c;但不想立即提…

Vue 3.5+ Teleport defer 属性详解:解决组件渲染顺序问题的终极方案

&#x1f4cb; 概述 Vue 3.5 引入了 Teleport 的 defer 属性&#xff0c;这是一个重要的延迟解析特性。传统的 Teleport 在组件挂载时会立即解析目标容器&#xff0c;而 defer 属性允许推迟 Teleport 的目标解析&#xff0c;直到应用的其他部分挂载完成。 ⚠️ 传统 Teleport …

【102页PPT】某著名企业智能制造解决方案及智能工厂产品介绍(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/91662620 资料解读&#xff1a;某著名企业智能制造解决方案及智能工厂产品介绍 详细资料请看本解读文章的最后内容 智能制造背景与整体规划…

Revisiting Character-level Adversarial Attacks for Language Models

文章目录**核心设计目标****关键步骤与实现细节**1. **候选位置选择&#xff08;Algorithm 1: get_top_locations&#xff09;**2. **扰动生成与筛选&#xff08;Algorithm 2: Charmer&#xff09;**3. **适配大语言模型&#xff08;LLM&#xff09;的攻击****实验中的性能表现…

(一)Python + 地球信息科学与技术 (GeoICT)=?

目录 引子 一、核心定位&#xff1a;Python 为何能重塑 GeoICT&#xff1f; 二、Python 在 GeoICT 中的关键应用领域 1. 空间数据处理&#xff08;GIS 基础&#xff09; 2. 遥感图像处理与解译 3. 空间分析与建模 4. 地学数据可视化 5. 时空大数据分析 三、Python GeoI…

OpenAI 发布了 GPT-5,有哪些新特性值得关注?国内怎么使用GPT5?

GPT-5很强&#xff0c;在LMAreana上获得了1481分&#xff0c;超过Gemini 2.5 Pro&#xff0c;夺回第一。 国内怎么使用GPT5&#xff1f;-> zhangfeidezhu.com/?p1033 这次发布的GPT-5系列包含三个模型&#xff1a; GPT-5&#xff1a;适合复杂推理、广泛的世界知识&#x…

PowerPoint和WPS演示放映PPT时如何禁止鼠标翻页

在演示播放PPT的时候&#xff0c;我们有时候会用鼠标在幻灯片上划重点&#xff0c;一不小心就点击了鼠标左键&#xff0c;而默认的鼠标左键是向下翻页&#xff08;下一步&#xff09;。可以简单设置一下&#xff0c;禁用鼠标翻页的功能&#xff0c;改为其他方式翻页。一、禁用/…

基于springboot养老院管理系统 毕业论文+项目源码及数据库文件

&#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;优创学社 &#x1f495;&#x1f495;个人简介&#xff1a;本人在读博士研究生&#xff0c;拥有多年程序开…

Meteodyn WT 6.7(Meteodyn)风力资源评估及微观选址软件工具

Meteodyn WT 6.7&#xff08;Meteodyn&#xff09;风力资源评估及微观选址软件工具&#xff0c;基于计算流体力学&#xff08;CFD&#xff09;技术&#xff0c;主要用于复杂地形下的风能评估和风电场选址。该软件由法国政府环境与能源署&#xff08;ADEME&#xff09;支持开发&…

计算机网络 TCP time_wait 状态 详解

TCP 的 TIME_WAIT 状态是 TCP 连接终止过程中 主动关闭连接的一方&#xff08;通常是先调用 close() 或主动发送 FIN 的一端&#xff09;进入的一个重要状态。理解其原理、副作用和优化策略对高性能网络编程和服务器调优至关重要。&#x1f50d; 一、TIME_WAIT 是什么&#xff…

《GuardHFL: Privacy Guardian for Heterogeneous Federated Learning》——论文阅读

研究背景&#xff1a;异构联邦中各客户端模型结构&#xff0c;精度&#xff0c;算力都不同&#xff0c;无法像传统联邦那样共享梯度&#xff0c;只能通过“查询-响应”使用辅助数据来训练模型。这种方法存在严重隐私问题&#xff1a;直接共享查询样本会泄露敏感信息&#xff0c…