网站首页 网站地图
网站首页 > 唯美文案 > 倒序插入法的详细计算步骤?

倒序插入法的详细计算步骤?

时间:2025-03-29 09:51:51

倒序插入法(也称为倒插排序)是一种改进的插入排序算法,其核心思想是从待排序序列的末尾开始向前遍历,将每个元素插入到已排序部分的适当位置。以下是详细的计算步骤及Python实现示例:

一、算法步骤

初始化

将待排序序列的第一个元素视为已排序部分,其余元素为未排序部分。

从后向前遍历

从待排序序列的最后一个元素开始,向前遍历每个元素。

插入操作

对于当前元素`arr[i]`,在已排序部分(`arr`到`arr[i-1]`)中从后向前扫描。

找到第一个小于或等于`arr[i]`的元素位置`j`。

将`arr[i]`插入到位置`j`,并将`arr[j]`及之后的元素向后移动一位。

重复步骤2和3

继续向前遍历,直到所有元素都被插入到已排序部分。

完成排序

遍历完成后,整个序列即为有序序列。

二、Python实现示例

```python

def insertion_sort_descending(arr):

n = len(arr)

for i in range(n - 1, 0, -1): 从后向前遍历

key = arr[i]

j = i - 1

找到第一个小于或等于key的位置

while j >= 0 and arr[j] > key:

arr[j + 1] = arr[j]

j -= 1

arr[j + 1] = key 插入key

return arr

示例

arr = [6, 3, 8, 2, 9, 1, 7]

sorted_arr = insertion_sort_descending(arr)

print("Sorted array is:", sorted_arr)

```

三、示例解析

以数组`[6, 3, 8, 2, 9, 1, 7]`为例:

初始状态:

已排序部分:``

未排序部分:`[3, 8, 2, 9, 1, 7]`

第一轮遍历(i=6)

`key=1`,与已排序部分比较,找到插入位置`j=0`,插入后数组变为`[1, 3, 8, 2, 9, 6, 7]`

第二轮遍历(i=5)

`key=6`,与已排序部分比较,找到插入位置`j=5`,数组保持不变`[1, 3, 8, 2, 9, 6, 7]`

后续遍历

继续向前遍历,最终得到有序数组`[1, 2, 3, 6, 7, 8, 9]`

四、时间复杂度

最坏情况:

O(n²)(当序列逆序时)

平均情况:O(n²)

最好情况:O(n)(当序列已排序时)

五、空间复杂度

空间复杂度:O(1)(原地排序)

倒序插入法通过减少元素移动次数,理论上比正序插入排序性能更好,但整体时间复杂度仍为平方级,适用于小规模数据排序。