#选择排序

Selection Sort

🔗 LeetCode

#步骤

  1. 比较第一个数与后续所有的数,记录最小数的下标。交换最小数到第一个位置
  2. 重复每一个数直到排序完成

#代码实现

function sortArray(nums: number[]): number[] {
  const len = nums.length

  if (len <= 1) {
    return nums
  }

  for (let i = 0; i < len - 1; i++) {
    let minIndex = i

    for (let j = i + 1; j < len; j++) {
      if (nums[minIndex] > nums[j]) {
        minIndex = j
      }
    }

    if (minIndex !== i && nums[minIndex] < nums[i]) {
      ;[nums[i], nums[minIndex]] = [nums[minIndex], nums[i]]
    }
  }

  return nums
}

#性能

时间复杂度:O(n²) 空间复杂度:O(1) 稳定性:不稳定

#复习

function sortArray(nums: number[]): number[] {
  if (nums.length <= 1) {
    return nums
  }

  for (let i = 0; i < nums.length; i++) {
    // 记录最小数下标为初始下标
    let minIndex = i

    // 遍历比较第一个数与后续所有的数
    for (let j = i + 1; j < nums.length && nums[minIndex] > nums[j]; j++) {
      // 记录最小数的下标
      minIndex = j
    }

    // 如果最小数的下标不是初始下标,交换最小数到第一个位置
    if (minIndex !== i) {
      ;[nums[i], nums[minIndex]] = [nums[minIndex], nums[i]]
    }
  }

  return nums
}