把你的算法改变一下:
纪录开始的位置为初始为止,最终位置为结束位置。
从A1开始,依次向右检查。
如果该数和初始位置不对应,跳过该数。
否则:纪录该数位置。从它开始,依次把数放到结束位置,并且把结束位置的数置换出来。检查结束位置是否为纪录,如果是则跳过(一个循环完成)
只要初始位置和结束位置计算时间是常数,这个算法就应该是线性时间,同时占用常数内存
可以这样
所有跟帖:
•
计算时间是否常数(或平均是常数), 不是很明显。
-乱弹-
♂
(0 bytes)
()
07/27/2009 postreply
21:25:41
•
似乎很明显
-说了就走-
♂
(183 bytes)
()
07/28/2009 postreply
16:07:49
•
主要问题是只能用const memory
-康MM-
♀
(88 bytes)
()
07/28/2009 postreply
16:37:05
•
似乎没有那么复杂
-说了就走-
♂
(803 bytes)
()
07/29/2009 postreply
21:45:44
•
回复:似乎没有那么复杂
-康MM-
♀
(104 bytes)
()
07/30/2009 postreply
07:33:36
•
我觉得我解释不清楚
-说了就走-
♂
(1593 bytes)
()
07/30/2009 postreply
11:56:00
•
主要是难以判断一个位置有没有排好。
-乱弹-
♂
(355 bytes)
()
07/30/2009 postreply
17:30:25
•
你可以run一下这个程序,对任何n都适用
-说了就走-
♂
(357 bytes)
()
07/30/2009 postreply
20:47:50
•
你一直在假设a[k]=k。没有这个假设你的算法不成立
-康MM-
♀
(0 bytes)
()
07/31/2009 postreply
07:14:51
•
那么请问你的假设是什么?
-说了就走-
♂
(216 bytes)
()
07/31/2009 postreply
18:16:46
•
还是问冬瓜太郎吧,他说可以就可以
-康MM-
♀
(177 bytes)
()
08/02/2009 postreply
10:25:52
•
你说得很有道理
-说了就走-
♂
(2675 bytes)
()
08/02/2009 postreply
13:50:02
•
我还是觉得我们在说两件不同的事
-康MM-
♀
(0 bytes)
()
08/06/2009 postreply
17:49:24