JS算法探秘之——选择排序

134 阅读1分钟

选择排序的流程:

  1. 给定一个乱序数组,左侧不断有序,右侧无序数组不断减小。
  2. 对于内层循环,对于每个一个元素, 假设第一个元素是最小,下标是min_idx ,遍历它后面的所有元素,如果存在arr[j] < arr[min_idx]找到最小的下标j,并且更新min_idx, 遍历完以后,交换 i 和 min_idx。
  3. 对于外层循环,遍历所有的元素。
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);
// [
//   [11, 12, 22, 25, 64],
//   [1, 2, 3, 4, 5, 6],
//   [1, 2, 3, 5, 7],
// ];