基本思想

将元素依次插入到已排好的序列中。(将nums[0]看做已排好的序列)

具体实现

  1. def insertion_sort(nums: List):
  2. length = len(nums)
  3. for i in range(1, length):
  4. key = nums[i]
  5. j = i - 1
  6. while j >= 0 and nums[j] > key:
  7. nums[j+1] = nums[j]
  8. j -= 1
  9. nums[j+1] = key

性能分析

平均时间复杂度:

  • 计算数组长度length插入排序 - 图1
  • 两次循环:插入排序 - 图2
  • 总计:插入排序 - 图3

因为插入排序隐含的常数因子非常小,所以在数组不大的情况下(如小于20)通常选择插入排序

空间复杂度:

  • 插入排序 - 图4