P1012有关快排的问题

有一个很囧很强大的问题

快排如果这样打

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 条评论

  • @ 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

信息

ID
1012
难度
7
分类
计算几何 点击显示
标签
递交数
4128
已通过
878
通过率
21%
被复制
18
上传者