Skip to content

选择排序

选择排序将数组划分为已排序和未排序两部分。每一轮从未排序区间中找到最小元素,并将它放到区间起点。

实现

js
function selectionSort(arr) {
  const result = [...arr]

  for (let start = 0; start < result.length - 1; start++) {
    let minIndex = start

    for (let i = start + 1; i < result.length; i++) {
      if (result[i] < result[minIndex]) minIndex = i
    }

    if (minIndex !== start) {
      ;[result[start], result[minIndex]] = [result[minIndex], result[start]]
    }
  }

  return result
}

复杂度

  • 时间复杂度:始终为 O(n²)
  • 空间复杂度:O(1),不计算复制输入数组的空间
  • 稳定性:通常不稳定

选择排序的交换次数较少。如果写入操作成本较高,它有时比冒泡排序更合适。

用文字记录成长,用代码创造价值。