我之前曾经问过类似的问题,但我一直在搜索,似乎无法找到答案。
我现在的任务是使用快速排序算法对7个字母的简单数组进行排序。 我们需要显示排序的每个步骤,每次都强调轮廓。 我们的讲师要求我们使用最右边的值作为每个步骤的支点。 根据此视频https://www.youtube.com/watch?v=aQiWF4E8flQ,这是我到目前为止(以粗体显示):
GACEFB的 d
A | GCEFB的 d
AC | GEFB的 d
ACB | EFG的 d
ACB的 d | FG 电子
但我不确定从这里去哪里。在分区的左侧,D是枢轴,但没有大于D的值。那么枢轴在哪里? 我见过的每个教程都使用三个中间值作为枢轴,或最左边的,我不是最好的算法。
B部分让我们展示了使用相同规则对ABCDEFG进行排序的每一步。不知道从哪里开始,因为我有同样的问题。 对不起,如果这是一个愚蠢的问题。
答案 0 :(得分:1)
考虑每次迭代会发生什么。
请记住,快速排序的工作原理如下:
(我知道我正在使用"数组"含糊地......但我觉得这个想法很清楚)
我认为您错过了一个简单的事实:一旦您选择了枢轴,您就将放在它的正确位置,并对其他阵列应用快速排序。 ..你不会再次对枢轴进行快速排序。
我们假设你有一个名为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]
Punch line:即使您选择最右边的数组条目,也可能会出现这样一个条目:" good"枢轴值。
真正的最坏的情况是对已排序的数组应用快速排序。但同样的规则适用。尝试将上述过程应用于以下内容:QuickSort(ABCDEFG, G)