📜  插入排序的时间复杂度 (1)

📅  最后修改于: 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 变量来保存当前需要插入的元素。由于每次插入前都需要向前查找,因此插入排序的时间复杂度比较高,但是其实现简单,且在小规模数据上表现良好。