我正在做 CLRS 的算法介绍中的练习。这不是评分作业或任何东西,我只是想理解这个问题。
问题如下:
我们可以将插入排序表示为递归过程,如下所示。为了对 A[1..n] 进行排序,我们递归地对 A[1..n-1] 进行排序,然后将 A[n] 插入到排序后的数组 A[1..n-1] 中。为这个递归版本的插入排序的运行时间写一个递归。
问题的解决方案:
因为在最坏的情况下将 A[n] 插入排序数组 A[1. .n -1],我们得到递归 T(n) = O(1) 如果 n = 1 , T(n-1)+ O(n) 如果 n > 1 。此递归的解决方案是 T(n) = O(n^2)。
所以我知道如果 n = 1,那么它已经排序,因此需要 O(1) 时间。但我不明白递归的第二部分:O(n) 部分是我们将要排序的元素插入到数组中的步骤,这在最坏的情况下需要 O(n) 时间——在这种情况下,我们必须遍历整个数组并在其末尾插入。
我无法理解它的递归部分(T(n-1))。T(n-1) 是否意味着每次递归调用我们都在对数组中的一个元素进行排序?这似乎不对。