插入排序(Insertion Sort)详解 + Python实现

插入排序是一种简单直观的排序算法,尤其在数据量较小或部分有序的情况下表现良好。本文将深入介绍插入排序的原理、实现、执行过程、复杂度分析以及适用场景。

📌一、算法思想

核心思想

类似"抓扑克牌"的排序方式:每次从无序部分拿一张牌,插入到有序部分的合适位置。

步骤如下:

  1. 从第 2 个元素开始,向前扫描已排序部分;

  2. 找到第一个不大于当前元素的位置;

  3. 插入到该位置,后面元素依次后移。

🧪二、Python实现代码

插入排序代码如下:

python 复制代码
def insert_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]            # 当前待插入元素
        j = i - 1
        # 将所有比 key 大的元素向后移动
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        # 插入到正确位置
        arr[j + 1] = key
    return arr

# 示例
arr = [8, 4, 1, 6, 3]
print('insert_sorted:', insert_sort(arr))

🔍三、图示过程分析

arr = [8, 4, 1] 为例:

  • 第1轮:4 < 8 → 插入前面 → [4, 8, 1]

  • 第2轮:1 < 8,1 < 4 → 插入最前面 → [1, 4, 8]

⏱️四、时间复杂度分析

情况 比较次数 时间复杂度
最好:完全有序 每轮最多 1 次 O(n)
最坏:完全逆序 类似冒泡 O(n²)
平均情况 - O(n²)
  • 空间复杂度:O(1),原地排序;

  • 稳定性:稳定排序算法(不会打乱相等元素顺序);

🎯五、插入排序适用场景

适用情况 原因
数据量较小 常数因子小
部分有序 时间复杂度接近 O(n)
要求稳定排序 插入排序稳定

🧠六、总结

插入排序虽然在大数据量下效率不高,但其思想简洁,适合教学与面试中快速实现。实际应用中,如果能检测出部分有序或预排序数据,插入排序可以发挥优势。