详解插入排序算法原理与使用方法

插入排序算法

算法概述

插入排序算法(Insertion Sort)是一种简单直观且稳定的排序算法。它的基本思想是将一个待排序的序列分为两部分,一部分是已排序的,另一部分是未排序的。对于未排序的部分,每次取出一个元素,将其插入到已排序的部分中正确的位置上,直到所有元素都排好序。

算法流程

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

  1. 从第二个元素开始,取出一个元素;
  2. 将该元素和前面已排序的部分中的元素从后往前逐个比较,找到该元素应该插入的位置;
  3. 将该元素插入到正确的位置中;
  4. 重复步骤 1-3,直到所有元素都排好序。

算法示例

示例一

假设有一个待排序序列为:[5, 2, 8, 3, 9, 1],则插入排序的具体过程如下:

  1. 第一轮插入,5 已经是有序的部分,故取出 2 进行比较,2 小于 5,将其插入到 5 前面,序列变为 [2, 5, 8, 3, 9, 1];
  2. 第二轮插入,取出 8 进行比较,8 大于 5,不用插入,序列为 [2, 5, 8, 3, 9, 1];
  3. 第三轮插入,取出 3 进行比较,3 小于 8,将其插入到 5 和 2 的前面,序列变为 [2, 3, 5, 8, 9, 1];
  4. 第四轮插入,取出 9 进行比较,9 大于 8,不用插入,序列为 [2, 3, 5, 8, 9, 1];
  5. 第五轮插入,取出 1 进行比较,1 小于 9,将其插入到前面的元素中,序列变为 [1, 2, 3, 5, 8, 9];
  6. 完成排序。

示例二

假设有一个待排序序列为:[4, 3, 1, 7, 5],则插入排序的具体过程如下:

  1. 第一轮插入,4 已经是有序的部分,故取出 3 进行比较,3 小于 4,将其插入到 4 和 3 的前面,序列变为 [3, 4, 1, 7, 5];
  2. 第二轮插入,取出 1 进行比较,1 小于 4,将其插入到 4、3 和 1 的前面,序列变为 [1, 3, 4, 7, 5];
  3. 第三轮插入,取出 7 进行比较,7 大于 4、3 和 1,不用插入,序列为 [1, 3, 4, 7, 5];
  4. 第四轮插入,取出 5 进行比较,5 小于 7,将其插入到前面的元素中,序列变为 [1, 3, 4, 5, 7];
  5. 完成排序。

使用方法

算法实现

针对以上的算法流程,我们可以基于 Python 语言编写出如下的插入排序算法实现:

def insert_sort(array):
    for i in range(1, len(array)):
        j = i - 1
        tmp = array[i]
        while j >= 0 and array[j] > tmp:
            array[j+1] = array[j]
            j -= 1
        array[j+1] = tmp
    return array

上述实现中,我们首先通过 for 循环遍历了需要进行排序的序列每一个需要进行排序的元素。然后以这个元素为标记点,在其向前的已排序的序列中寻找一个合适的位置进行插入。同时为了保证整个序列的有序性,对于已排序的序列中每个元素都需要和当前这个元素进行比较。

调用示例

调用本排序算法只需要传入待排序序列的数组参数即可,例如:

input_array = [5, 2, 8, 3, 9, 1]
output_array = insert_sort(input_array)
print(output_array)  # 输出 [1, 2, 3, 5, 8, 9]

总结

插入排序算法的时间复杂度为 O(n^2),虽然在效率方面不如快速排序、归并排序等排序算法,但它简单直观,实现简单,而且在处理数据量较小、数据有序性较高的情况下,表现良好,因此广泛应用于软件开发中。