原理
遍历给定的无序序列, 将选中的元素插入已排好序的序列中, 直到序列中所有元素都在正确位置
算法步骤
插入排序的核心思想是将待排序序列分为已排序区间和未排序区间,初始时已排序区间只包含第一个元素,然后依次从未排序区间中取出元素,插入到已排序区间的正确位置,直至未排序区间为空。
动态演示
代码实现
# python
# 遍历整个数组
for index in range(len(array)):
cur = index
# 判断是否已在数组头部, 判断当前位置元素是否小于数组中前一个元素
while cur > 0 and array[cur] < array[cur-1]:
# 交换当前索引与其前一位索引的元素
array[cur], array[cur-1] = array[cur-1], array[cur]
# 索引向前移动
cur -= 1
// golang
n := len(array)
for i := 1; i < n; i++ {
cur := i
for cur > 0 && array[cur] < array[cur-1] {
array[cur], array[cur-1] = array[cur-1], array[cur]
cur --
}
}
算法特点
- 简单直观:插入排序是一种容易理解和实现的排序算法,适用于小规模数据或部分有序的数据集合
- 稳定性:插入排序是稳定的排序算法,相等元素的相对位置不会改变
- 原地排序:插入排序是一种原地排序算法,只需要常数级的额外空间用于存储临时变量
- 时间复杂度:最坏情况下的时间复杂度为 O(n^2),平均情况下的时间复杂度也是 O(n^2)。对于已基本有序的序列,插入排序的时间复杂度可以降低到 O(n)
对于已基本有序的序列,插入排序的时间复杂度可以降低到 O(n)