选择排序

入门

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

用你自己的数组跑一遍

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²)

算法讲解

选择排序将数组分为已排序和未排序两部分,初始已排序部分为空。

每轮在未排序部分中找到最小元素,与未排序部分的第一个元素交换。

经过 n-1 轮后,数组完全有序。

时间复杂度 O(n²),无论输入如何比较次数都是 n(n-1)/2 次。