Quicksort - 最糟糕的情况

时间:2014-10-23 22:02:08

标签: algorithm sorting quicksort

我之前曾经问过类似的问题,但我一直在搜索,似乎无法找到答案。

我现在的任务是使用快速排序算法对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进行排序的每一步。不知道从哪里开始,因为我有同样的问题。 对不起,如果这是一个愚蠢的问题。

1 个答案:

答案 0 :(得分:1)

考虑每次迭代会发生什么。

请记住,快速排序的工作原理如下:

  1. 如果数组为空,则返回一个空数组并退出
  2. 如果数组只有一个条目,则返回条目并退出
  3. 选择一个支点
  4. 将数组拆分为三个子数组:
    • 小于数据透视的值
    • 枢轴
    • 大于数据透视的值
  5. 对于每个非空数组,再次应用快速排序并连接生成的数组
  6. (我知道我正在使用"数组"含糊地......但我觉得这个想法很清楚)

    我认为您错过了一个简单的事实:一旦您选择了枢轴,您就放在它的正确位置,并对其他阵列应用快速排序。 ..你不会再次对枢轴进行快速排序。

    我们假设你有一个名为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)