选择排序是一种简单直观的排序算法。它的工作原理是:首先在整个序列中找到最小(或最大)的元素,将其与序列第一个位置的元素进行交换;然后,在剩下的未排序元素中继续寻找最小(或最大)的元素,将其与第二个位置的元素交换;以此类推,不断在剩余的未排序部分中选择最值元素,并放置到已排序部分的末尾,直到所有元素均被处理完毕。整个排序过程如同“不断选择并放置最值”,其时间复杂度为 O(n²),虽然效率不高,但由于其思路清晰、交换次数少,在某些特定场景下仍有其应用价值。
1. C/C++版代码:
void selectionSort(int arr[], int n) {
int i, j;
int minIndex; // 记录当前最小元素的下标
int temp;
// 外层循环:控制已排序部分的边界
// 每轮找到未排序部分的最小元素
for (i = 0; i < n - 1; i++) {
minIndex = i; // 假设当前位置是最小值
// 内层循环:在未排序部分查找最小元素
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 更新最小元素下标
}
}
// 将最小元素交换到当前位置
if (minIndex != i) {
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}2. Java版代码:
public class SelectionSort {
public static void selectionSort(int[] arr) {
int n = arr.length;
// 外层循环:控制已排序部分的边界
// 每轮将未排序部分的最小元素放到已排序部分的末尾
for (int i = 0; i < n - 1; i++) {
int minIndex = i; // 假设当前位置i是最小元素
// 内层循环:在未排序部分[i+1, n-1]中查找实际最小元素
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 更新最小元素的下标
}
}
// 将找到的最小元素交换到当前位置i
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}3. Python版代码:
def selection_sort(arr): # 选择排序:每轮选择未排序部分的最小元素,交换到已排序部分的末尾 n = len(arr) # 外层循环:控制已排序部分的边界 # 每轮结束后,arr[0...i]已是有序的 for i in range(n - 1): min_index = i # 假设当前位置是最小元素 # 内层循环:在未排序部分[i+1, n-1]中查找实际最小元素 for j in range(i + 1, n): if arr[j] < arr[min_index]: min_index = j # 更新最小元素的下标 # 将找到的最小元素交换到当前位置i if min_index != i: arr[i], arr[min_index] = arr[min_index], arr[i]
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程