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

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

📌一、算法思想

核心思想

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

步骤如下:

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

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

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

🧪二、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)
要求稳定排序插入排序稳定

🧠六、总结

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值