插入排序算法
算法概述
插入排序算法(Insertion Sort)是一种简单直观且稳定的排序算法。它的基本思想是将一个待排序的序列分为两部分,一部分是已排序的,另一部分是未排序的。对于未排序的部分,每次取出一个元素,将其插入到已排序的部分中正确的位置上,直到所有元素都排好序。
算法流程
插入排序算法的具体流程如下:
- 从第二个元素开始,取出一个元素;
- 将该元素和前面已排序的部分中的元素从后往前逐个比较,找到该元素应该插入的位置;
- 将该元素插入到正确的位置中;
- 重复步骤 1-3,直到所有元素都排好序。
算法示例
示例一
假设有一个待排序序列为:[5, 2, 8, 3, 9, 1],则插入排序的具体过程如下:
- 第一轮插入,5 已经是有序的部分,故取出 2 进行比较,2 小于 5,将其插入到 5 前面,序列变为 [2, 5, 8, 3, 9, 1];
- 第二轮插入,取出 8 进行比较,8 大于 5,不用插入,序列为 [2, 5, 8, 3, 9, 1];
- 第三轮插入,取出 3 进行比较,3 小于 8,将其插入到 5 和 2 的前面,序列变为 [2, 3, 5, 8, 9, 1];
- 第四轮插入,取出 9 进行比较,9 大于 8,不用插入,序列为 [2, 3, 5, 8, 9, 1];
- 第五轮插入,取出 1 进行比较,1 小于 9,将其插入到前面的元素中,序列变为 [1, 2, 3, 5, 8, 9];
- 完成排序。
示例二
假设有一个待排序序列为:[4, 3, 1, 7, 5],则插入排序的具体过程如下:
- 第一轮插入,4 已经是有序的部分,故取出 3 进行比较,3 小于 4,将其插入到 4 和 3 的前面,序列变为 [3, 4, 1, 7, 5];
- 第二轮插入,取出 1 进行比较,1 小于 4,将其插入到 4、3 和 1 的前面,序列变为 [1, 3, 4, 7, 5];
- 第三轮插入,取出 7 进行比较,7 大于 4、3 和 1,不用插入,序列为 [1, 3, 4, 7, 5];
- 第四轮插入,取出 5 进行比较,5 小于 7,将其插入到前面的元素中,序列变为 [1, 3, 4, 5, 7];
- 完成排序。
使用方法
算法实现
针对以上的算法流程,我们可以基于 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),虽然在效率方面不如快速排序、归并排序等排序算法,但它简单直观,实现简单,而且在处理数据量较小、数据有序性较高的情况下,表现良好,因此广泛应用于软件开发中。