问题描述
- 数据结构快速排序问题
-
设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为( )。 (A) 2,3,5,8,6 (B) 3,2,5,8,6 (C) 3,2,5,6,8 (D) 2,3,6,5,8 能画出具体图么,答案是C,实在不能理解
解决方案
严格来说,这个题目根本就是错的。出题的人根本就不会编程序。
不同的交换算法得到的结果不同,ABC都有可能。
出题的人或者给出程序片断,或者问4个答案哪个不对。
解决方案二:
很明显,出题的是一个废柴,他自己不会编程,估计也就是背下了一个书上的例子代码,就以为全天下快速排序都必须按照这个写。这种人你遇见呵呵一下就行了。
解决方案三:
没错,如果你看过快速排序的算法,就清楚了比5小的会放到他前面
解决方案四:
其实就是先以5为基准,把大于5和小于5的数分开
解决方案五:
老曹说的对,只有两边分开,都是对的
解决方案六:
考试题目就是这样,很坑
解决方案七:
确实ABC 都是满足 比5大的和小的分别在5的两边,
可能就是因为 5 6 8 的顺序原因(AB都是586),遇见比5大的没必要改变其顺序,好吧,我也承认这个解释很牵强
解决方案八:
不知道对不对,我按这个方法,好像答案就是C
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
解决方案九:
很明显,上面这些人都是真的没有编过快速排序的算法,如果真的编一个紧凑的快速排序算法的话就会是C的,你们所说的原理差不多是对的,但是真的编程的时候取第一个
为主元做一趟循环之后就是C的结果,不信可以去编,如果你能编出AB的情况要么就是代码不够紧凑,要么就是你的这个算法可以发表论文了!顺便说下代码不够紧凑的意思
就是:时间复杂度前面的系数会比较大!