返回

六六力扣刷题系列--插入排序 插插更健康

后端

随着小六六学习数据结构与算法的不断深入,插入排序作为排序算法中相对简单的一种,自然也成为需要掌握的基础知识之一。本文将以深入浅出的方式介绍插入排序的原理、复杂度以及详细的实现步骤,并辅以代码示例,让读者轻松掌握这一实用排序算法。

插入排序的原理

插入排序的思路很简单,就像我们在现实生活中整理杂乱无章的扑克牌一样,我们将手中的牌一张一张地插入到已经排好序的牌组中,使其保持有序。具体步骤如下:

  1. 从第二个元素开始,将该元素与它前面的元素进行比较。
  2. 如果该元素比前面元素小,则将其插入到前面元素之前的位置。
  3. 重复步骤 2 和 3,直到所有元素都已插入到正确的位置。

以下是一个以数组 [3, 1, 2, 5, 4] 为例的插入排序过程:

  1. 将第二个元素 1 与前面的元素 3 进行比较,1 比 3 小,因此将 1 插入到 3 的前面。
  2. 将第三个元素 2 与前面的两个元素进行比较,2 比 1 和 3 都大,因此将 2 插入到 1 和 3 的中间。
  3. 将第四个元素 5 与前面的三个元素进行比较,5 比 1、2 和 3 都大,因此将 5 插入到 3 的后面。
  4. 将第五个元素 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]

通过这篇文章,读者可以对插入排序算法有更深入的理解,并能够轻松地实现和应用这一算法。作为一名程序员,掌握各种排序算法是必备的基础技能,希望本文能为读者提供一些帮助。