返回
六六力扣刷题系列--插入排序 插插更健康
后端
2024-01-21 07:19:24
随着小六六学习数据结构与算法的不断深入,插入排序作为排序算法中相对简单的一种,自然也成为需要掌握的基础知识之一。本文将以深入浅出的方式介绍插入排序的原理、复杂度以及详细的实现步骤,并辅以代码示例,让读者轻松掌握这一实用排序算法。
插入排序的原理
插入排序的思路很简单,就像我们在现实生活中整理杂乱无章的扑克牌一样,我们将手中的牌一张一张地插入到已经排好序的牌组中,使其保持有序。具体步骤如下:
- 从第二个元素开始,将该元素与它前面的元素进行比较。
- 如果该元素比前面元素小,则将其插入到前面元素之前的位置。
- 重复步骤 2 和 3,直到所有元素都已插入到正确的位置。
以下是一个以数组 [3, 1, 2, 5, 4] 为例的插入排序过程:
- 将第二个元素 1 与前面的元素 3 进行比较,1 比 3 小,因此将 1 插入到 3 的前面。
- 将第三个元素 2 与前面的两个元素进行比较,2 比 1 和 3 都大,因此将 2 插入到 1 和 3 的中间。
- 将第四个元素 5 与前面的三个元素进行比较,5 比 1、2 和 3 都大,因此将 5 插入到 3 的后面。
- 将第五个元素 4 与前面的四个元素进行比较,4 比 1、2 和 3 都大,但比 5 小,因此将 4 插入到 3 和 5 的中间。
经过上述步骤,数组 [3, 1, 2, 5, 4] 就被排序为 [1, 2, 3, 4, 5]。
插入排序的时间复杂度
插入排序的时间复杂度为 O(n^2),其中 n 是待排序数组的长度。这是因为在最坏的情况下,需要对数组中的每个元素进行 n 次比较和移动操作。然而,在平均情况下,插入排序的时间复杂度为 O(n),因为大多数情况下,数组中的元素已经基本有序,只需要进行少量比较和移动操作。
插入排序的实现
以下是以 Python 实现的插入排序算法:
def insertion_sort(arr):
"""
对数组 arr 进行插入排序。
参数:
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
arr = [3, 1, 2, 5, 4]
print(insertion_sort(arr)) # [1, 2, 3, 4, 5]
通过这篇文章,读者可以对插入排序算法有更深入的理解,并能够轻松地实现和应用这一算法。作为一名程序员,掌握各种排序算法是必备的基础技能,希望本文能为读者提供一些帮助。