2019 408真题 第10题 快速排序

排序过程中,对未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,可能是快速排序第二趟结果的是:
A. 5,2,16,12,28,60,32,72
B. 2,16,5,28,12,60,32,72
C. 2,12,16,5,28,32,72,60
D. 5,2,12,28,16,32,72,60
答案选择D,我的问题是既然快速排序每一趟都可以确定一个元素的最终位置,那这个四个选项都已经确定两个元素的最终位置:
A: 28 和 72
B:   2 和 72
C: 28 和 32
D: 12 和 32
这样判断的话4个选项满足了第二趟快速排序的结果,希望路过的大神可以指点一下我哪里疏漏了,谢谢!

#考研#
全部评论
仔细想了一下,一楼应该是对的
1 回复
分享
发布于 2019-12-15 10:03
他这个第二趟我是这么理解的:把快排想象成二叉树分割,第一趟是确认根节点和左右树区间,第二趟是确认左右子树的根节点和继续分割。由于有可能第一次有一侧为空,所以可能确认的是两个或三个点,而且两个点的情况必须有一侧是空的。ab没问题,c还有个2,d找不到第3个点,所以选d
11 回复
分享
发布于 2019-11-22 19:59
小红书
校招火热招聘中
官网直投
     再来扩展一下一楼的意思,一楼的意思是,第一趟快速排序至少确定1个点的最终位置,第二趟快速排序一般再会确定2个点的位置(也可能是1个点),因为是在第一次排序后的基准点的2侧分别再进行一次快排,那么再确定2个基准点的最终位置,如果恰好第一次排序后的这个基准点在恰好在序列的最左边或者最右边,那么只能确定左边或者右边1个基准点位置。所以可能是第二趟下来可能是确定2个基准点也可能是3个基准点位置。如果一直是这样只能确定1个基准点位置,那么就退化成了冒泡,就成了O(n2)了。      再简单一点想,快速排序每一趟都可以确定一个元素的最终位置,冒泡是不是也是这样,如果快排仅仅是这样,那为什么还需要快排呢,快排的意义在于,轮询一遍可能会确定多个基准点的最终位置。
11 回复
分享
发布于 2019-12-15 10:11
还是不明白
点赞 回复
分享
发布于 2019-12-15 09:36

相关推荐

4 5 评论
分享
牛客网
牛客企业服务