上一篇
Python插入排序算法详解 - 原理、实现与代码示例
- Python
- 2025-07-30
- 76
Python插入排序算法详解
全面解析插入排序原理、实现步骤、Python代码示例及性能分析
什么是插入排序?
插入排序是一种简单直观的排序算法,它的工作原理类似于我们整理扑克牌的方式。算法将待排序序列分为已排序和未排序两部分,每次从未排序部分取出一个元素,将其插入到已排序部分的正确位置。
插入排序的特点
- 简单易懂,实现容易
- 对小规模数据排序效率高
- 对近乎有序的数据排序效率非常高
- 稳定排序算法(相同元素位置不变)
- 原地排序(只需O(1)额外空间)
适用场景
- 小规模数据排序
- 输入数据基本有序的情况
- 作为更复杂算法(如TimSort)的子过程
- 需要稳定排序且空间有限的场景
插入排序算法步骤
详细步骤
- 从第一个元素开始,该元素可以认为已被排序
- 取出下一个元素,在已排序序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5直到所有元素排序完成
可视化过程
排序过程示例:
初始: [5, 2, 4, 6, 1, 3]
第1轮: [2, 5, 4, 6, 1, 3]
第2轮: [2, 4, 5, 6, 1, 3]
第3轮: [2, 4, 5, 6, 1, 3]
第4轮: [1, 2, 4, 5, 6, 3]
第5轮: [1, 2, 3, 4, 5, 6]
Python实现插入排序
代码说明
- 外层循环:从索引1开始遍历到数组末尾,表示未排序部分的开始
- key变量:存储当前需要插入的元素值
- 内层循环:将当前元素与已排序部分比较,找到合适的插入位置
- 移动元素:将比key大的元素向右移动,为key腾出插入空间
- 插入操作:当找到合适位置后,将key插入该位置
插入排序算法分析
时间复杂度
- 最优情况:O(n) - 当输入数组已经有序时
- 最差情况:O(n²) - 当输入数组完全逆序时
- 平均情况:O(n²)
空间复杂度
- O(1) - 插入排序是原地排序算法,只需要常数级的额外空间
稳定性
- 稳定 - 插入排序不会改变相等元素的相对顺序
与其他排序算法比较
算法 | 平均时间复杂度 | 空间复杂度 | 稳定性 | 适用场景 |
---|---|---|---|---|
插入排序 | O(n²) | O(1) | 稳定 | 小数据量或基本有序 |
冒泡排序 | O(n²) | O(1) | 稳定 | 教学用途,实际应用少 |
选择排序 | O(n²) | O(1) | 不稳定 | 小数据量,内存有限 |
快速排序 | O(n log n) | O(log n) | 不稳定 | 大数据量,通用排序 |
插入排序总结
插入排序是一种简单但高效的算法,特别适用于小规模数据或基本有序的数据集。虽然其时间复杂度为O(n²),不适合大规模数据排序,但在特定场景下它比许多O(n log n)的算法更高效。
在实际应用中,插入排序常被用作更高级算法(如TimSort)的子过程,用于处理小型数组。理解插入排序有助于掌握更复杂的排序算法,是算法学习的重要基础。
本文由YuwenGaoNan于2025-07-30发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256844.html
发表评论