/**
* @function 选择排序
* @desc 遍历数组,设置最小值的索引为 0,如果取出的值比当前最小值小,就替换最小值索引,遍历完成后,将第一个元素和最小值索引上的值交换。如上操作后,第一个元素就是数组中的最小值,下次遍历就可以从索引 1 开始重复上述操作。
* 概括:取出每一次的最小值,然后置换
* 时间复杂度:n-1 + n-2 + ... + 1 = n(n+1)/2 => O(n*n)
* @param {原数组} arr
* @returns 处理过后的原数组
*/
function selection (arr) {
if (!Array.isArray(arr)) {
return []
}
for (let i = 0; i < arr.length; i++) {
debugger
let minIndex = i
for (let j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
let temp = arr[minIndex]
arr[minIndex] = arr[i]
arr[i] = temp
}
return arr
}
console.log(selection([8, 10, 3, 2, 9, 5, 4, 0, 1]))
选择排序