排序算法之简单选择排序
这里是传送门⇒总结:关于排序算法
平均时间复杂度 | 最优时间复杂度 | 最差时间复杂度 | 空间复杂度 | 稳定性 | |
---|---|---|---|---|---|
简单选择排序 | O(n2) | O(n2) | O(n2) | O(1) | 不稳定 |
- 算法描述
- 从未排序区间中选择键值最小的元素,将这个元素放在已经排序好的区间的末尾
- 重复上述操作,直到待排序列排序完毕
- JS实现
// 使用公用函数Swap
// 交换array[i]和array[j]
function Swap(array, i, j) {
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
// 此处传入的array会被直接改变
function SelectSort(array) {
var len = array.length;
for (var i = 0; i < len - 1; i++) {
var min = i;
for (var j = i + 1; j < len; j++) {
if (array[min] > array[j]) {
min = j;
}
}
if (min != i) {
Swap(array, i, min);
}
}
}
- 分析
- 不管待排序列情况如何,由于要找出最小值,键值比较总要遍历整个未排序区间,所以键值比较的次数总是属于O(n2)的,所以时间复杂度总是O(n2),但其实数据移动的次数会比冒泡排序少很多
- 该排序属于原地排序,空间复杂度S(n) = O(1)
- 乍一看觉得这个算法是稳定的,但其实只要是“序列倒数第二位和序列倒数第二位之前的某个数一样,且都是这个序列的最大值”这种情况,比如
[2,4,3,4,1]
,它就不能维持其稳定性,所以简单选择排序是不稳定的