📅  最后修改于: 2023-12-03 15:39:51.732000             🧑  作者: Mango
插入排序是一种简单直观的排序算法,其基本思想是将待排序的序列分为已排序区间和未排序区间,每次从未排序区间中取出一个元素,在已排序区间中找到合适的位置插入该元素,以此方式遍历未排序区间,最终得到有序序列。
插入排序的时间复杂度是 $O(n^2)$,其中 $n$ 是待排序序列的长度。
具体来说,由于要将未排序区间内的每个元素都插入到已排序区间中,因此需要进行 $n-1$ 次遍历。每次遍历需要从已排序区间的末尾开始向前查找,最坏情况下需要比较 $i$ 次才能找到合适的位置,其中 $i$ 是已排序区间的长度,因此总的比较次数是:
$$ 1 + 2 + \cdots + (n-1) = \frac{n(n-1)}{2} $$
因此,插入排序的时间复杂度为 $O(n^2)$。
下面是使用 Python 实现的插入排序算法:
def insertion_sort(nums):
for i in range(1, len(nums)):
temp = nums[i]
j = i - 1
while j >= 0 and nums[j] > temp:
nums[j+1] = nums[j]
j -= 1
nums[j+1] = temp
其中,nums
是待排序的序列,temp
是当前需要插入的元素,j
是已排序区间的末尾位置。
在上述代码中,我们使用了一个 while
循环来向前查找合适的插入位置,并使用了一个 temp
变量来保存当前需要插入的元素。由于每次插入前都需要向前查找,因此插入排序的时间复杂度比较高,但是其实现简单,且在小规模数据上表现良好。