选择排序
每轮循环找到数组中的最小或最大值,并将其放到第一位,然后找到第二小的值放到第二位......以此类推
每轮循环会把最大或者最小值排序好
时间复杂度
O(n^2)
空间复杂度O(n)
是否稳定:取决于是否判断min !== i
js
function selectionSort(arr) {
let len = arr.length
let min // 记录最小值下标
// 外层循环控制当前比较的值
for(let i = 0; i < len; i++) {
min = i
// 内层循环找出最小/大值; i: 从已排序(i)的后面开始找(优化)
for(let j = i + 1; j < len; j++) {
// 找到最小值的下标(升序)
if(arr[j] < arr[min]) {
min = j
}
}
// if(min !== i) // 这里可以加个判断 用于稳定性
// 与最小/大值交换位置
[arr[i], arr[min]] = [arr[min], arr[i]]
}
return arr
}
let res = selectionSort([4,2,3,6,7,1])
console.log(res)