📜  插入排序算法(1)

📅  最后修改于: 2023-12-03 14:54:44.759000             🧑  作者: Mango

插入排序算法介绍

插入排序算法(Insertion Sort)是一种简单直观的排序算法,它的基本思想是从第二个元素开始依次将每个元素插入到已排序的部分中的正确位置,直到所有元素都被插入到有序序列中。插入排序算法通常比选择排序算法和冒泡排序算法更快,且在数据量较小的情况下表现良好。

算法流程

插入排序算法的整体流程如下:

  1. 从第二个元素开始,在已排序的部分中查找插入位置。
  2. 将当前元素插入到已排序的部分中的正确位置。
  3. 重复步骤 1 和步骤 2 直到所有元素都被插入到有序序列中。
代码实现

插入排序算法可以用两种不同的方式进行实现:迭代和递归。

迭代实现

插入排序算法的迭代实现代码如下:

def insertion_sort(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

上面这段代码首先遍历整个列表,从第二个元素开始遍历。在每次循环中,将当前元素存储在变量 key 中,并将游标 j 初始化为当前元素的前一个位置。

然后,使用 while 循环在已排序的部分中查找插入位置。在查找过程中,如果当前元素小于已排序部分中的任何一个元素,则将已排序部分中的元素向右移动一个位置。最终,将当前元素插入到已排序部分中的正确位置。

递归实现

插入排序算法的递归实现代码如下:

def insertion_sort_recursion(arr, n):
    if n <= 1:
        return
    insertion_sort_recursion(arr, n - 1)
    last = arr[n - 1]
    j = n - 2
    while j >= 0 and arr[j] > last:
        arr[j + 1] = arr[j]
        j -= 1
    arr[j + 1] = last

上面这段代码使用递归方式将列表划分为两个部分:已排序部分和未排序部分。在每次递归中,算法将未排序部分的最后一个元素插入到已排序部分中的正确位置。

算法分析

插入排序算法的时间复杂度为 O(n^2),其中 n 是数组的长度。虽然插入排序算法的时间复杂度较高,但是它的常数因子较小,因此在数据规模较小的情况下表现良好。

插入排序算法是一种原地排序算法,不需要额外的内存空间。由于算法的实现简单,所以它通常被用作快速排序等高级排序算法的基础。