选择排序

入门

比较次数固定,交换次数少,适合理解「选择-放置」策略。

选择排序的思路非常直观:就像一排人按身高站队,你每次都从剩余的人里挑出最矮的,放到队伍的最前面。

具体来说,先从整个数组里找到最小值,和第一个位置交换;再从第二个位置开始找最小值,和第二个位置交换。如此重复,直到只剩一个元素。

在动画中可以重点关注两个指针:一个是当前"已排好"的边界,另一个是在未排序部分来回扫描、寻找最小值的指针。

AlgoAnim · 选择排序
速度
待机
// 源代码
1void selectionSort(int arr[], int n) {
2    for (int i = 0; i < n - 1; i++) {
3        int minIdx = i;
4        for (int j = i + 1; j < n; j++) {
5            if (arr[j] < arr[minIdx]) {
6                minIdx = j;
7            }
8        }
9        if (minIdx != i) {
10            int temp = arr[i];
11            arr[i] = arr[minIdx];
12            arr[minIdx] = temp;
13        }
14    }
15}

复杂度分析

时间 O(n²)
空间 O(1)
最优 O(n²)
最坏 O(n²)