选择排序
入门比较次数固定,交换次数少,适合理解「选择-放置」策略。
选择排序的思路非常直观:就像一排人按身高站队,你每次都从剩余的人里挑出最矮的,放到队伍的最前面。
具体来说,先从整个数组里找到最小值,和第一个位置交换;再从第二个位置开始找最小值,和第二个位置交换。如此重复,直到只剩一个元素。
在动画中可以重点关注两个指针:一个是当前"已排好"的边界,另一个是在未排序部分来回扫描、寻找最小值的指针。
// 自定义输入
速度 中
待机 ⌨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²)