选择排序
实现原理
选择排序是一种原址比较排序算法。大致思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。
实现代码
function selectionSort(arr) {
if (arr.length < 2) {
return arr;
}
for (var i = 0; i < arr.length - 1; i++) {
// 初始时,假设第一个数即为最小数,记录它得下标
var minIndex = i;
// 从最小数的后面一个开始遍历
for (var j = i + 1; j < arr.length; j++) {
// 只要找到比arr[minIndex]数小 就把当前的下标赋值给minIndex
minIndex = arr[minIndex] > arr[j] ? j : i;
// 交换 ES6语法
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
}
return arr;
}
总结
对于选择排序来说其时间复杂度:
第一次内循环比较 N - 1 次,然后是 N-2 次,N-3 次
共比较的次数是 (N - 1) + (N - 2) + … + 1,求等差数列和,得 (N - 1 + 1)* (N-1) / 2 = N^2-N / 2。
舍去最高项系数,其时间复杂度为 O(N^2)。
改排序算法不稳定会破坏原始序列。