选择排序
描述
选择排序(Selection-sort)是一种简单直观的排序算法。
它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
编码实现
- 遍历数组,假设第一个为最小值
min = i
- 遍历
(i, n)
找到最小值的下标min
,最后与i
进行交换
1 | var SelectSort = (arr) => { |
优化角度
同时找最小和最大元素
双重循环遍历数组,每经过一轮比较,找到最小元素的下标,将其交换至首位。找到最大的坐标放在最后一位
- 遍历数组,找出最大值
max
和最小值min
- 交换
min
与i
- 判断
i
是否为max
,如果刚好为i
则由于i
已经被交换过,max
的值应该是跟i
交换过后的min
- 交换
max
和n - i - 1
(尾部)
1 | var SelectSort = (arr) => { |
算法复杂度 (稳如狗的时间复杂度)
平均时间复杂度 | 最好情况 | 最坏情况 | 空间复杂度 | 排序方式 | 稳定性 |
---|---|---|---|---|---|
O(n²) | O(n²) | O(n²) | O(1) | in-place | 不稳定 |
对比
跟插入、冒泡相比
从图中不难看出,这个排序方法确实很辣鸡啊,无论正序,逆序,随机各种情况下都是很稳定的久(令人泪目)