作者RJking (RJ-king)
看板TransCSI
标题Re: [问题] QuickSort的问题
时间Wed Jun 10 04:38:33 2009
※ 引述《chemical1223 (康康康康康康)》之铭言:
: 想请问的是开始移动後若i跟j同时停留在同一个数上该怎麽解决?
: 例如以下问题
: 给定 26,5,37,1,61,11,59,15,27,用QuickSort排列
: 第一次执行完会是
: 11,5,15,1,26,61,59,37,27
: 左半部没问题
: 我想讨论的是26的右半部 61,59,37,27
: 执行完後发现会有下面结果
: 61 , 59 , 37 , 27
: ij (i,j都停在27上)
: 此时swap i跟j
: 61 , 59 , 37 , 27
: ij
: j继续前进
: 61 , 59 , 37 , 27
: j i
: 此时i、j交错,swap j跟pivot
: 得 37,59,61,27
: 其实在上一步我就知道自己错了,可是我不知道自己错在哪里
: 跟pivot置换的不是交错後j所指的那个数吗?翻书也看不出个所以然来
: 想请问板友们遇到这种情况要怎麽办?
: 若有资讯不足的地方麻烦提醒,我会再补上
: 谢谢各位
依照你做题方式,你的pivot应该是61了
61的话,最後i跟j会停在27,SWAP 61跟27,变27 59 37 61(61不加入下次排序)
然後pivot变27,i跟j停在59,但27比59小,所以不会SWAP,剩下59 37
最後pivot变59,.....(中略),SWAP 59跟37,之後判断排序结束
其实要看程式写法...参考这篇
http://0rz.tw/a122P
里面的C的写法比较OK,不是判断ij是否交错,而是判断i是否<j(因为会有i=j)
虽然也不很OK啦
总之如果有给定程式码或虚拟码就照着做比较好
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.117.92.133
1F:推 chemical1223:所以说要看程式怎麽写吗@@? 06/10 04:46