我看到以前也有人问过类似的问题,但我已经找了一段时间,似乎找不到答案。
我现在的任务是使用快速排序算法对一个由7个字母组成的简单数组进行排序。
我们需要展示这类的每一步,每次都要在轴心线下画线。
我们的老师要求我们使用最右边的值作为每一步的轴心。
根据这段视频,https://www.youtube.com/watch?v=aQiWF4E8flQ,这是我目前所拥有的(以粗体显示):
GACEFBD公司
A GCEFBD公司
AC | GEFBD公司
ACB EFGD公司
ACBD功能梯度
但我不知道从这里走到哪里。在分区的左侧,d是轴心点,但没有大于d的值。那么轴心点要去哪里?
我看过的每一个教程都使用中间值3作为轴心,或者说最左边的,我并不擅长算法。
B部分让我们展示了按照相同规则对ABCDEFG进行排序的每个步骤不知道从哪里开始,因为我有同样的问题。
抱歉,如果这是个愚蠢的问题。
最佳答案
考虑每次迭代的结果。
记住,快速排序的工作原理如下:
如果数组为空,则返回空数组并退出
如果数组只有一个条目,则返回条目和退出
选择轴
将数组拆分为三个子数组:
小于轴的值
轴心
大于轴的值
对于每个非空数组,再次应用快速排序并连接结果数组
(我知道我在模糊地使用“数组”这个词……但我想这个想法很清楚)
我认为你遗漏了一个简单的事实:一旦你选择了轴,你就把它放在正确的位置,并对其他数组应用快速排序…不再对轴心应用快速排序。
假设您有一个名为QuickSort(Array, Pivot)
的函数,假设您总是将数组最左边的项作为轴心:
开始:QuickSort(GACEFBD , D)
第一次迭代:[QuickSort(ACB, B), D, QuickSort(GEF, F)]
如您所见,最右边的值可以是一个“好”轴。
在第一次迭代之后,D
已经处于正确的位置
第二迭代:[[QuickSort(A,A), B, QuickSort(C,C)], D, [QuickSort(E,E), F, QuickSort(G,G)]]
结果:[A, B, C, D, E, F, G]
穿孔机:即使您取数组的最右边的条目,也可能存在该条目是“好”轴心值的情况。
最糟糕的情况是对已经排序的数组应用快速排序。但同样的规则也适用。尝试将上述过程应用于以下内容:QuickSort(ABCDEFG, G)
关于algorithm - Quicksort-最坏情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26538245/