- 清帝之惑之雍正
- 2009-07-08 16:26:27 @
有一个很囧很强大的问题
快排如果这样打
While XMid do Dec(J);
(Mid:=X[(I+J) Div 2];Mid:Extended)
就对了
但是如果是
While XX[Mid] do Dec(J);
(Mid:=(I+J)Div 2;Mid:Longint)
就全错。。。
这个是。。。什么问题
5 条评论
-
ufo172849z LV 10 @ 2009-07-08 22:25:46
发现问题,RP++。思考问题,RP++++。解决问题,RP++++++。
-
2009-07-08 20:56:58@
我发现了
我取了个波浪形数值就挂掉了
1 10 2 9 3 8 4 7 5 6
结果输出直接乱掉然后我才发现A[Mid] 是会变的
我RP--
-
2009-07-08 20:24:23@
MS是一样的啊。。。其实就是那个Mid是取下标还是直接取该下标的值的问题
-
2009-07-08 20:21:51@
出错原因是,如果mid是(l+r) div 2的话,不能直接和a[mid]比较。必须存一下m:=a[mid],因为a[mid]会改变。
快排还有一个bug,如果mid:=(a[l]+a[r]) div 2,那么排两个数1.1和1.2会出错。 -
2009-07-08 19:42:32@
...
那两断代码明显不一样的吧....
你自己手工模拟一下就知道了~
- 1