Skip to content

选择排序

每轮循环找到数组中的最小或最大值,并将其放到第一位,然后找到第二小的值放到第二位......以此类推

  • 每轮循环会把最大或者最小值排序好

  • 时间复杂度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)