Insertion-Sort的运行时间

时间:2011-04-19 23:15:43

标签: algorithm

在我的书中,他们计算了n的输入上插入排序的运行时间。算法是:

Insertion-Sort(A)                        cost   times
1. for j <- 2 to length[A]                c1    n
2.     do key <- A[j]                     c2    n-1
3.         Insert A[j] into the           0     n-1
            sorted sequence A[1..j-1]
4.     i <- j - 1                         c4    n-1
5.     while i > 0 and A[i] > key         c5    sum_{j=2}^n t_j
6.         do A[i+1] <- A[i]              c6    sum_{j=2}^n (t_j-1)
7.         i <- i - 1                     c7    sum_{j=2}^n (t_j-1)
8.     A[i+1] <- key                      c8    n-1

我的问题是为什么第1行的时间= n?为什么不只是n-1次?

3 个答案:

答案 0 :(得分:1)

在我看来,实际上没有初始化的额外1次成本是因为在n-1次成功迭代控制之后将返回到i <=(长度(A))条件并且将i与A的长度进行比较。这1个额外的比较成本添加到循环中。

这个问题在第4页上有解释。科尔曼算法简介25。

答案 1 :(得分:0)

根据C中的for循环来考虑它:

for (int i = 2; i <= length(A); ++i) ...

此行已达到 n 次 - 一次用于初始化, n - 1次用于增量和测试。

答案 2 :(得分:0)

CLRS的第25页 “当for或while循环时 以通常的方式退出(即由于循环头中的测试),则执行测试 比环体多一倍。” 这意味着退出条件将在退出for或while循环之前再执行一次。