快速排序的问题

对下列关键字序列用快速排序的方法进行排序时,速度最快的的情形是()
A{21,25,5,17,9,23,30} B{25,23,30,17,21,5,9}
C{21,9,17,30,25,23,5} D{5,9,17,21,23,25,30}
这个我知道原始序列有序性越强,快速排序的效率就越差。但怎么判断那个序列有序性强?可能这道题也不是完全靠有序性,请高手好好讲讲这道题该怎么做,谢谢。
不好意思答案是A,您也许应该排序一下,这个我排完了,但没发现从选项上看到有什么简便算法。 序列是从小到大的。 大家不要忘了分成两股才算一趟排序。多趟才构成整个的快速排序。
lazysunboy 你说的跟我想的一样,答案太der了我感到,可他为什么会选第一个?您看一下,(我持C的态度),他们对c的讲解很可笑。

这道题的话我不清楚是不是应该把每个选项的步骤给列下来,但是我很迷惑。
快速排序实际上是以每次都以当前数组的第一位作为基准作为比较的,所以说第一位的值的位置更靠中间(排序好的),二分法后就均匀,速度就会越快。
A选项第一次选择21将会换到17的位置,第一次变换后变为:
17,9,5,21,25,23,30
再进行一次变换,就已经排好序了
C选项同理,第一次选择将21换到30的位置,变换后变为:
5,9,17,21,25,23,30
A、C两选项第一次选择的比较次数和交换次数都相同,所以时间就看第二轮了
(17,9,5)和(5,9,17)谁快?应该是(5,9,17)快一步,因为(17,9,5)还要交换一步变成(5,9,17),然后再剩下(5,9),而(5,9,17)第一步不变化,然后剩下(9,17),两个剩下的时间(即5,9和9,17再比较一次且都是已排序的)肯定都是一样的。
所以时间就差在需要交换的一步上:
(17,9,5)->(5,9,17)->(5,9)+(17)第一步需要3步比较和一次交换;
(5,9,17)->(5,9,17)->(5)+(9,17)第一步需要3步比较无需交换;
所以选C
***********************************************************************
看了你的图,我补充下:
答案对A的解释在第一步上有误啊,怎么会变成(9,17,5,21,23,25,30)呢?
A选项第一次查找将会交换25和9的位置,9只能出现在第二位的。然后再交换21和17,只会变成17,9,5,21,25,23,30啊,答案有误!!!!
另外对于其他答案,我认为,对于算法不仅仅是交换,比较也是要算时间的,快速排序在已经排序好的数列上花的时间是最大的,平方级
但是这些在规模较小的情况下因素太多了~~
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-15
对于同样的算法,序列中数字需要交换的次数越少速度越快啊,完全排序的序列基本上只走for循环啊,都不用交换,应该选D吧
第2个回答  2010-11-16
Java的话,按循环,判断,交换次数来看速度最快绝对是D。
你可以写个试试看。
相似回答
大家正在搜