前置知识:无

建议:会的同学直接跳过

选择排序

范围上,找到最小值并放在 位置,然后 范围上继续

// 选择排序
func selectionSort(arr []int) {
  n := len(arr)
  for i := 0; i < n; i++ { // i ~ n - 1 找最小值
    minIdx := i
    for j := i + 1; j < n; j++ {
      if arr[j] < arr[minIdx] {
        minIdx = j
      }
    }
    arr[minIdx], arr[i] = arr[i], arr[minIdx] // 最小值放到 i 位置
  }
}

冒泡排序

范围上,相邻位置较大的数往后移,最大值最终来到 位置,然后 范围上继续

// 冒泡排序
func bubbleSort(arr []int) {
  n := len(arr)
  for i := n - 1; i > 0; i-- {
    for j := 0; j < i; j++ { // 0 ~ i 范围上,相邻位置较大的数往后移
      if arr[j] > arr[j+1] {
        arr[j], arr[j+1] = arr[j+1], arr[j]
      }
    }
  }
}

插入排序

范围上已经有序,新来的数从右到左滑到不再小的位置插入,然后继续(“摸牌”)

// 插入排序
func insertionSort(arr []int) {
  n := len(arr)
  for i := 1; i < n; i++ { // [0, i) 已有序
    for j := i; j > 0; j-- { // 新来的数:i
      if arr[j] < arr[j-1] {
        arr[j], arr[j-1] = arr[j-1], arr[j]
      } else { // 不再小了,停!
        break
      }
    }
  }
}