选择排序的流程:
- 给定一个乱序数组,左侧不断有序,右侧无序数组不断减小。
- 对于内层循环,对于每个一个元素, 假设第一个元素是最小,下标是min_idx ,遍历它后面的所有元素,如果存在arr[j] < arr[min_idx]找到最小的下标j,并且更新min_idx, 遍历完以后,交换 i 和 min_idx。
- 对于外层循环,遍历所有的元素。
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function selectionSort(arr) {
for (let i = 0; i < arr.length; i++) {
let minIndex = i;
for (let j = i; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr, minIndex, i);
}
return arr;
}
let arr = [64, 25, 12, 22, 11];
let arr2 = [1, 2, 3, 4, 5, 6];
let arr3 = [7, 5, 3, 2, 1];
let tests = [arr, arr2, arr3];
let res = tests.map(selectionSort);
console.log(res);