【入门级-算法-6、排序算法:选择排序】

1、选择排序算法思想

选择排序是一种简单直观的排序算法。它的基本思想是:

从未排序序列中找到最小(或最大)的元素,将其存放到序列的起始位置(即与起始位置的元素交换)。

然后,再从剩余的未排序元素中继续寻找最小(或最大)的元素。

重复上述过程,直到所有元素均排序完毕。

可以理解为:不断地从后面未排序的部分选择一个最小的,放到前面已排序部分的末尾。

2、算法步骤(以升序为例)

假设有一个数组 arr,长度为 n。

第一轮:从 arr0 到 arrn-1 中找到最小的元素,将其与 arr0 交换。此时 arr0 已排好序。

第二轮:从 arr1 到 arrn-1 中找到最小的元素,将其与 arr1 交换。此时 arr0 和 arr1 已排好序。

...

第 i 轮:从 arri 到 arrn-1 中找到最小的元素,将其与 arri 交换。

如此循环,总共进行 n-1 轮,最后一轮只剩下一个元素,它自然是最大的,无需处理。

3、举例说明

代码实现

#include <stdio.h>

// 选择排序函数 (升序)

void selectionSort(int arr\[\], int n) {

int i, j, minIndex, temp;

// 外层循环,控制轮数,共进行 n-1 轮

for (i = 0; i < n - 1; i++) {

// 1. 假设当前未排序部分的第一个元素是最小的

minIndex = i;

// 2. 内层循环,在未排序部分 (i+1 到 n-1) 中寻找真正的最小值的位置

for (j = i + 1; j < n; j++) {

if (arrj < arrminIndex) {

minIndex = j; // 更新最小元素的索引

}

}

// 3. 如果找到的最小元素不在它应该在的位置 (i),就交换

if (minIndex != i) {

temp = arri;

arri = arrminIndex;

arrminIndex = temp;

}

// 如果 minIndex == i,说明 arri 已经是未排序部分的最小值,无需交换

}

}

// 打印数组的函数

void printArray(int arr\[\], int size) {

int i;

for (i = 0; i < size; i++) {

printf("%d ", arri);

}

printf("\n");

}

// 主函数测试

int main() {

int arr\[\] = {64, 25, 12, 22, 11};

int n = sizeof(arr) / sizeof(arr0); // 计算数组长度

printf("原始数组: \n");

printArray(arr, n);

selectionSort(arr, n); // 调用排序函数

printf("排序后的数组: \n");

printArray(arr, n);

return 0;

}

输出结果

原始数组:

64 25 12 22 11

排序后的数组:

11 12 22 25 64

选择排序是一种教学意义大于实际应用价值的算法。它帮助我们理解排序的基本思想------"选择"和"交换",但在实际项目中,对于性能有要求的场景,通常会使用更高效的算法如快速排序、归并排序等。

相关推荐
数模竞赛Paid answer14 分钟前
2025年中青杯数学建模A题康养城市建设求解全过程论文及程序
算法·数学建模·数据分析·中青杯
网安蟹佬霸15 分钟前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法
yangmu320333 分钟前
深度解析:短视频是如何通过“算法+神经机制”劫持用户时间的?
算法
LuminousCPP39 分钟前
栈和队列专题(四):LeetCode 232. 用栈实现队列|双栈分工 + 按需迁移 + 摊还 O(1)
c语言·数据结构·笔记·算法·leetcode
纪念 22943 分钟前
二叉树排序讲解(一)
数据结构
tudousisi2221 小时前
01背包8.21
数据结构·算法
ZJU_统一阿萨姆1 小时前
【算子开发】Reduction算子完全指南
人工智能·算法·语言模型
鹿角片ljp10 小时前
LeetCode 46. 全排列|吃透回溯
算法·leetcode·职场和发展
鼎艺创新科技10 小时前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
石头猫灯11 小时前
WordPress wp2shell 漏洞链完整拆解流程
网络·数据结构·安全·web安全