📜  算法|插入排序|问题3(1)

📅  最后修改于: 2023-12-03 15:41:09.425000             🧑  作者: Mango

算法介绍:插入排序

插入排序是一种简单直观的排序方法,它的基本思想是将待排序的元素逐个插入到已排好序的序列中,从而得到一个新的、有序的序列。

插入排序的核心代码如下:

def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr

在这个代码中,我们首先循环从待排序序列的第二个元素开始到最后一个元素结束,这里的 i 表示当前需要插入的元素的下标。

在每一轮循环中,我们将当前元素的值保存在一个变量 key 中,同时使用变量 j 充当指针,从 i 的前一个元素开始向前遍历,直到找到一个比 key 小的元素或者找到序列的起始位置。

在遍历过程中,我们每次都将 j 所指向的元素后移一位,以便为 key 腾出插入位置。最后我们将 key 插入到 arr[j+1] 的位置。

问题3:插入排序的时间复杂度是什么?

插入排序的时间复杂度由两个因素决定:待排序序列的长度和序列的有序程度。

当待排序的序列已经是有序的情况下,插入排序只需要进行一次遍历,因此它的时间复杂度是 O(n)。

当待排序序列是无序的情况下,插入排序需要进行多次遍历,其时间复杂度为 O(n^2)。

在实际应用中,由于插入排序在处理小规模数据时的效率比较高,因此它常常被用作快速排序的辅助排序算法。

总结一下,插入排序的时间复杂度为 O(n^2),但在实际应用中常常表现出较高的效率。