首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >插入排序的运行时间

插入排序的运行时间
EN

Stack Overflow用户
提问于 2011-04-20 07:15:43
回答 3查看 1.6K关注 0票数 0

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

代码语言:javascript
复制
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

我的问题是为什么第一行中的times=n?为什么不是n-1次?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-20 07:20:52

考虑一下C中的for循环:

代码语言:javascript
复制
for (int i = 2; i <= length(A); ++i) ...

这条线到达n次-一次用于初始化,n-1次用于增量和测试。

票数 0
EN

Stack Overflow用户

发布于 2012-09-19 14:08:55

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

这件事在科尔曼算法导论的第25页上有解释。

票数 1
EN

Stack Overflow用户

发布于 2018-11-15 15:40:47

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5723854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档