Skip to content

插入排序 #64

Open
Open
@myLightLin

Description

@myLightLin

简介

排序算法 时间复杂度 是否基于比较
冒泡、插入、选择 O(n²)
快排、归并 O(nlogn)
桶、计数、基数 O(n) ×

插入排序,每次将数据分为已排序和未排序区间,默认第一个元素为已排序,然后每次从未排序区间里取一个元素,通过比较,插入到已排序区间里,重复这个过程,直到未排序区间元素为空。

代码

function insertSort(arr) {
  const n = arr.length
  if (n <= 1) return

  for (let i = 1; i < n; i++) {
    let value = arr[i]
    let j = i - 1
    for (; j >= 0; j--) {
      if (arr[j] > value) {
        arr[j + 1] = arr[j] // 把数据往后搬,腾出位置
      } else {
        break
      }
    }
    arr[j+1] = value
  }
}

const arr = [4, 5, 6, 1, 2, 3]
insertSort(arr)  // [1, 2, 3, 4, 5, 6]

动画演示

Insertion-sort-example

总结

  1. 时间复杂度是 O(n²), 空间复杂度是 O(1),排序过程是稳定的。
  2. 最好时间复杂度是 O(n), 最坏时间复杂度是 O(n²)

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions