上一篇
插入排序算法详解:Python实现与运行过程 | 排序算法教程
- Python
- 2025-07-22
- 543
插入排序算法详解
Python实现与逐步运行过程可视化
插入排序是一种简单直观的排序算法,它的工作原理类似于我们整理扑克牌的方式:逐个将元素插入到已排序部分的正确位置。虽然在大数据集上效率不如高级算法,但在小规模数据或基本有序的数据集上表现优异。
插入排序工作原理
算法步骤:
- 从第一个元素开始,该元素可认为已排序
- 取下一个元素,在已排序序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序元素小于或等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5直到所有元素排序完成
算法特点:
- 时间复杂度:最优O(n),最差和平均O(n²)
- 空间复杂度:O(1) - 原地排序
- 稳定排序:相等元素的相对位置不变
- 对小规模或基本有序数据高效
- 简单易懂,实现容易
实际应用场景:
插入排序在实际应用中常用于:
- 小规模数据排序(n ≤ 50)
- 作为高级排序算法(如快速排序)的子过程
- 输入数据基本有序的情况
- 需要稳定排序且数据量不大的场景
- 在线算法场景(数据逐个到达时排序)
Python实现代码
def insertion_sort(arr):
# 遍历从1到len(arr)的所有元素
for i in range(1, len(arr)):
key = arr[i] # 当前需要插入的元素
j = i-1 # 指向已排序部分的最后一个元素
# 在已排序部分从后向前扫描,找到插入位置
while j >= 0 and key < arr[j]:
arr[j+1] = arr[j] # 将元素向后移动
j -= 1
arr[j+1] = key # 插入元素到正确位置
return arr
# 测试插入排序
data = [64, 34, 25, 12, 22, 11, 90]
print("排序前:", data)
sorted_data = insertion_sort(data)
print("排序后:", sorted_data)
代码解析:
- 外层循环:从第二个元素开始遍历(索引1),因为第一个元素被视为已排序
- key变量:存储当前需要插入的元素值
- 内层循环:将key与已排序部分从后向前比较,找到合适的插入位置
- 元素移动:当key小于已排序元素时,将元素向后移动一位
- 插入操作:在正确位置插入key值,完成当前元素的排序
插入排序逐步可视化
排序过程详解:
插入排序性能分析
情况 | 时间复杂度 | 描述 |
---|---|---|
最优情况 | O(n) | 输入数组已经有序,每次只需比较一次 |
平均情况 | O(n²) | 每个元素平均需要移动n/2次 |
最差情况 | O(n²) | 输入数组完全逆序,需要最大次数的比较和移动 |
空间复杂度 | O(1) | 原地排序,仅使用常量额外空间 |
与其他排序算法比较:
- vs 冒泡排序:插入排序通常更快,因为元素移动次数更少
- vs 选择排序:插入排序在基本有序数据上更快,选择排序写操作更少
- vs 高级排序算法:归并排序和快速排序在大数据集上更高效,但插入排序在小数据集上更简单高效
总结
插入排序是一种简单且有效的排序算法,特别适合小规模数据或基本有序的数据集。其主要优势包括:
- 实现简单,代码易于理解和编写
- 对小数据集非常高效(n ≤ 50)
- 在基本有序的数组上接近线性时间复杂度
- 原地排序,空间效率高
- 稳定排序,保持相等元素的相对顺序
- 在线算法,可以边接收数据边排序
虽然在大规模乱序数据上效率不高,但插入排序因其简单性和特定场景下的高效性,仍然是算法学习和实际应用中的重要组成部分。许多高级排序算法(如Timsort)在小规模子数组上使用插入排序来提升整体性能。
本文由WangJiu于2025-07-22发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20256257.html
发表评论