选择排序(Selection Sort)是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。
算法步骤
- 第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置
- 然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾
- 以此类推,重复第二步,直到全部待排序的数据元素的个数为零。
复杂度
| 标题 | 数据 |
|---|---|
| 平均时间复杂度 | O(n²) |
| 最好情况 | O(n²) |
| 最坏情况 | O(n²) |
| 空间复杂度 | O(1) |
| 排序方式 | In-place |
| 稳定性 | 不稳定 |
代码演示
function selectionSort(list) {
let len = list.length;
if (len <= 1) return list; //长度小于等于一,不用排序
for (let i = 0; i < len - 1; i++) {
let minIndex = i; //设置i为最小值的下标
for (let j = i + 1; j < len; j++) {
if (list[j] < list[minIndex]) {
minIndex = j //i和后边的进行比对,符合条件,更新minIndex
}
}
//如果不相等,两个值交换,小的放在前面
if (i !== minIndex)[list[minIndex], list[i]] = [list[i], list[minIndex]]
}
return list
}