【发布时间】:2013-09-19 10:43:16
【问题描述】:
我正在做 CLRS 的算法简介中的练习。这不是评分作业或任何东西,我只是想了解这个问题。
问题如下:
我们可以将插入排序表示为递归过程,如下所示。在 为了对 A[1..n] 进行排序,我们递归地对 A[1..n-1] 进行排序,然后 然后将 A[n] 插入已排序的数组 A[1..n-1]。写一个 此递归版本插入的运行时间的重复 排序。
问题的解决方法:
因为在最坏的情况下将 A[n] 插入到 排序数组 A[1. .n -1],如果 n = 1,我们得到递归 T(n) = O(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) 是否意味着每次递归调用我们都在对数组中的一个元素进行排序?这似乎不对。
【问题讨论】:
标签: algorithm sorting recursion recurrence