算法基础二:选择排序

news/2025/1/3 2:47:40/

选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

 选择排序算法通过选择和交换来实现排序,其排序流程如下:

(1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。
(2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2个位置的数据交换
(3)然后,这样不断重复,直到最后两个数据完成交换。最后,便完成了对原始数组的从小到大的排序。

知识点:①无论是平均还是最坏情况,时间复杂度都是O(n^2)

              ②在数据规模较小时效率较好,适用于对数据量较少的序列实现升序或降序排序

              ③选择排序算法可以看作是冒泡排序算法的“改良版”。和后者相比,选择排序算法大大减少了交换数据存储位置的操作。

              ④稳定性:不稳定

C语言代码

#include <stdio.h>// 函数声明
void Selection_sort(int a[], int len);int main() {int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };int len = sizeof(arr) / sizeof(arr[0]);  // 计算数组长度Selection_sort(arr, len);  // 调用选择排序函数// 打印排序后的数组for (int i = 0; i < len; i++) {printf("%d ", arr[i]);}return 0;
}// 选择排序函数
void Selection_sort(int arr[], int len)
{for (int i = 0; i < len -1; i++)//{int min = i;//第一个值默认最小for (int j = i+1; j < len; j++)//挨个比较一遍找出最小的值{if (arr[j] < arr[min])//如果比默认最小值小,把他的位置记录下来{min = j;}}if (min != i)//如果默认最小的位置不是实际最小的位置,则把此位置的数交换{int temp = arr[i];arr[i] = arr[min];arr[min] = temp;}}
}

如下为使用选择排序算法对 {14, 33, 27, 10, 35, 19, 42, 44} 实现升序排序的 Python 程序:

list = [14,33,27,10,35,19,42,44]
def selection_sort():length = len(list)# 从第 1 个元素开始遍历,直至倒数第 2 个元素for i in range(length - 1):min = i #事先假设最小值为第 i 个元素# 从第 i+1 个元素开始遍历,查找真正的最小值for j in range(i+1,length):if list[j]<list[min]:min = jif min != i:list[min],list[i] = list[i],list[min]selection_sort()
#输出排列好的数据
for i in list:print(i,end=" ")


http://www.ppmy.cn/news/1559509.html

相关文章

WordPress File Upload 插件 任意文件读取漏洞复现(CVE-2024-9047)

0x01 产品简介 WordPress File Upload插件是一款功能强大的WordPress站点文件上传插件,它允许用户在WordPress站点中的文章、页面、侧边栏或表单中轻松上传文件到wp-contents目录中的任何位置。该插件使用最新的HTML5技术,确保在现代浏览器和移动设备上都能流畅运行,同时也…

VSCode 插件开发实战(九): 不同插件之间如何通信

前言 VSCode 强大的扩展能力和灵活的插件系统使其在不同开发场景中游刃有余。在实际开发过程中&#xff0c;常常需要多个插件协同工作&#xff0c;这就涉及到插件之间的通信问题。本文将详细探讨如何在 VSCode 中实现自定义插件之间的通信&#xff0c;帮助开发者更高效地开发和…

bat脚本实现枚举本地磁盘,并从A-Z中找出一个可用磁盘映射

如题&#xff1a;假如本地计算机有A&#xff08;软盘&#xff09;、B&#xff08;软盘&#xff09;、C&#xff08;物理硬盘&#xff09;、D(光驱&#xff0c;未放光盘)&#xff0c;四个盘&#xff0c;则能找出 A:E:、B:F:、C:G:、D:H:四种映射方法&#xff0c;依此类推。 代码…

学习threejs,THREE.CircleGeometry 二维平面圆形几何体

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.CircleGeometry 圆形…

【每日学点鸿蒙知识】渐变效果、Web组件注册对象报错、深拷贝list、loadContent数据共享、半屏弹窗

1、HarmonyOS 有没有类似于渐变效果&#xff1f; 实现渐变的方式请参考以下代码&#xff1a; Entry Component struct Page240126155113078 {State message: string Hello World;build() {Row() {Column() {Row() {Text(this.message).fontSize(50).fontWeight(FontWeight.B…

【Python】‌数据库工具类,使用python连接sql server数据库

1.安装pymssql第三方库 pip install pymssql出现如下图&#xff0c;表示安装成功&#xff1a; 2.编写工具类&#xff0c;我这里取名为sql_server_util.py import pymssqlclass SqlServerUtil:def __init__(self, ip, username, password, database):self.ip ipself.username…

「Mysql优化大师一」mysql服务性能剖析工具

mysql生产环境死亡三连问&#xff1a; 如何确认服务器是否达到了最佳的状态找出某条语句为什么执行不够快停顿、堆积、卡顿等某些间歇性疑难故障 无法测量&#xff0c;就无法有效的优化&#xff01;&#xff01; 1. 慢查询日志 开启慢查询日志&#xff0c;可以让MySQL记录下查询…

YOLO11改进-注意力-引入多尺度卷积注意力模块MSCAM

如何在增强特征图的同时降低计算成本&#xff0c;以提升模型性能。基于此&#xff0c;MSCAM 模块采用了多尺度卷积注意力机制&#xff0c;通过 CAB、SAB 和 MSCB 三个子模块协同工作。CAB 利用自适应池化和卷积操作生成通道注意力权重&#xff0c;强调重要通道特征&#xff1b;…