返回
为什么你还没学会插入排序?原来是这样!
前端
2023-12-28 21:58:03
导言
算法是计算机科学的基础,排序算法更是其中不可或缺的一部分。插入排序作为一种简单且高效的排序算法,因其易于理解和实现而备受青睐。然而,许多人对插入排序的理解却停留在表面,未能真正掌握其精髓。这篇文章旨在弥补这一差距,为您提供一份全面且深入的插入排序指南。
插入排序原理
插入排序是一种基于比较的排序算法,它将待排序的元素逐个插入到已排序的序列中。其基本思想是:将第一个元素视为已排序序列,然后将剩余元素依次与已排序序列中的元素进行比较,找到合适的位置插入。
插入排序步骤
- 初始化: 将第一个元素视为已排序序列。
- 比较与插入: 依次将剩余元素与已排序序列中的元素进行比较,找到第一个比当前元素大的元素。
- 移动元素: 将已排序序列中比当前元素大的元素依次向后移动一个位置。
- 插入: 将当前元素插入已排序序列中空出的位置。
- 重复步骤 2-4: 继续对剩余元素重复步骤 2-4,直到所有元素都已插入。
代码实现
以下是用 Python 实现的插入排序代码:
def insertion_sort(arr):
"""插入排序算法
Args:
arr (list): 待排序的列表
Returns:
list: 排序后的列表
"""
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
示例
假设我们有一个待排序的列表 [5, 2, 8, 3, 1]
.
- 第一次循环:
- 将
2
插入到已排序的序列中([2]
)。
- 将
- 第二次循环:
- 将
8
插入到已排序的序列中([2, 8]
)。
- 将
- 第三次循环:
- 将
3
插入到已排序的序列中([2, 3, 8]
)。
- 将
- 第四次循环:
- 将
1
插入到已排序的序列中([1, 2, 3, 8]
)。
- 将
- 第五次循环:
- 将
5
插入到已排序的序列中([1, 2, 3, 5, 8]
)。
- 将
最终,我们得到了一个已排序的列表 [1, 2, 3, 5, 8]
.
复杂度分析
插入排序的平均时间复杂度为 O(n^2),其中 n 为待排序元素的个数。然而,在某些情况下,插入排序的时间复杂度可以降低到 O(n),例如当输入数据已经近似有序时。
应用
插入排序通常用于排序小型数据集或近似有序的数据集。由于其简单性和易于实现,它经常作为初学者学习排序算法的第一个算法。
结语
通过本文对插入排序原理、步骤、代码实现、示例和复杂度分析的深入探讨,您现在已经对这种基本排序算法有了全面的理解。掌握插入排序将为您的算法之旅奠定坚实的基础,并为应对更复杂的算法和数据结构做好准备。