选择排序
描述
选择排序(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 | 不稳定 |
对比
跟插入、冒泡相比
从图中不难看出,这个排序方法确实很辣鸡啊,无论正序,逆序,随机各种情况下都是很稳定的久(令人泪目)