快速排序小问题

对给定的整数序列(541,132,984,746,518,181,946,314,205,827)进行从小到大的排序时,采用快速排序(以中间元素518为基准)的第一趟扫描结果是
A.(181,132,314,205,541,518,946,827,746,984)
B.(541,132,827,746,518,181,946,314,205,984)
C.(205,132,314,181,518,746,946,984,541,827)
D.(541,132,984,746,827,181,946,314,205,518)
我算出来是(205,132,314,181,518,541,946,746,984,827)和答案不一样。

如果这是一道选择题的话,很明显结果应该是C
按照快速排序法规则,可知第一趟排序完成后,比基点小的应该都在基点的前面,比之大的都应该在其后面。
我按照排序方法过程验证了一下,结果与LZ结果相同,看来出题的人要反思一下了,呵呵
(我想考试题的目的是检查考生对知识点的理解,一道小小的选择题就要花费大量时间去计算,对考生就太不公平了,因此,我会选C。当然,经验证,它的答案也有问题)
详细过程:
541,132,984,746,518,181,946,314,205,827 共计十个数,key=518
开始时,I=0,J=9
1、从后往前查找小于key的数,J=8(205),与I(0)位(541)交换,结果
【205】,132,984,746,518,181,946,314,【541】,827
i=i+1=1

2、当前I=1,J=8,从前向后找大于key的数,I=2(984)与J(8)位(541)交换,结果
205,132,【541】,746,518,181,946,314,【984】,827
j=j-1=7

3、当前I=2,J=7,从后向前找小于key的数,J=7(314),与I(2)位(541)交换,结果
205,132,【314】,746,518,181,946,【541】,984,827
i=i+1=3

4、当前I=3,J=7,从前向后找大于key的数,I=3(746)与J(7)位(541)交换,结果
205,132,314,【541】,518,181,946,【746】,984,827
j=j-1=6

5、当前I=3,J=6,从后向前找小于key的数,J=5(181),与I(3)(541)位交换,结果
205,132,314,【181】,518,【541】,946,746,984,827

6、当前I=3,J=5,从前向后找大于key的数,当J==I时,本趟扫描结束,结果为:
205,132,314,181,518,541,946,746,984,827
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-24
你这是全国考试的题目?
(541,132,984,746,518,181,946,314,205,827)
用快速排序的思想无论题怎么变化步骤是不变的
如果以541为基准完成:(205,132,314,181,518,【541】,946,746,984,827),也就是你的答案,但不是以518为基准的。
如果以827为基准完成:(541,132,205,746,518,181,314,【827】,946,984)
题目要求以518为基准,是不是找到以518为基准的那一趟呢?追问

我肯定是详细步骤错了呢,能帮我详细说明一下吗?我加50分

追答

我查了一下,不是国考的题目,而考试的目的就象考堆判断一样,它与原给定的数组的顺序根本无关,更准确的说这道题只给四个答案,假定518是给定数据的第一个数,快速排序的结果就是把给定的数据分成两大块,一块比它都小,一块比它都大。这就是考试的目的。
所以答案是C.(205,132,314,181,518,746,946,984,541,827)
这要是国考的话绝对不会给出原数据,只给出后面的四个答案,我想你就不会有上面的问题了。

第2个回答  2011-09-24
应该是C追问

求详解谢谢

追答

从左边开始,第一个541比518大;右边205小,换
左边984大,右边314小,换
左边746大,右边181小,换
左右碰头,结束