【问题标题】:An example of Best Case Scenario for Quick Sort (Need someone to check if my answer is correct)快速排序的最佳案例场景示例(需要有人检查我的答案是否正确)
【发布时间】:2012-02-04 13:19:11
【问题描述】:

使用包含 15 个数字的列表,我需要给出一个代表最佳和最坏情况的列表。它说“q.s. 使用列表中的第一项作为枢轴项”。我不确定我是否每次都选择第一项作为枢轴,但这就是我的假设......

为了最好的情况..我想出了(粗体表示枢轴,斜体表示大于和小于标记):

8 1 3 2 6 5 7 4 12 9 11 10 14 13 15

4 1 3 2 6 5 7--8--12 9 11 10 14 13 15

2 1 3 --4--6 5 7。 ........8........10 9 11--12--14 13 15

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

希望有人可以在这里验证我的工作,如果有误,请指出方法和原因。

【问题讨论】:

标签: algorithm sorting


【解决方案1】:

快速排序的最佳情况的一个条件是枢轴总是在中间正确地撞击(也许在最后阶段除外),这么多肯定是正确的。除此之外,您希望尽可能少地进行交换,其精确配置取决于实现细节。

一个常见的实现是首先将枢轴交换到最后一个位置,然后排列其他元素,使小于(或等于)枢轴的元素排在较大的元素之前,最后将枢轴(从最后一个位置)交换为第一个较大的元素(然后重复出现)。

另一种方法是在排列之前将枢轴放入第一个插槽,然后与最后一个不超过枢轴的位置交换。

对于绝对最佳情况,这些策略需要不同的配置。例如,

4 1 3 5 6 7 2

是 'swap pivot into last place' 变体的最佳情况,而

4 1 3 2 6 5 7

是“枢轴不动”的最佳案例。

最坏的情况是当主元总是到达数组的一端时,精确的细节再次取决于实现,但排序或反向排序通常是最坏的情况。

【讨论】:

  • 感谢您的回复!我不知道这样的快速排序会有变化..所以这非常有用。虽然你没有大胆地陈述它,但从我从你的回复中读到的内容,我做得正确(因为枢轴保持不变)。 tyvm!
  • 是的,对于枢轴固定,这是最好的情况。忘了明确提及。
【解决方案2】:

在我看来是正确的。如果您使用以第一个元素为基准的快速排序,那么您希望第一个元素是数组的中间值。理想的枢轴在每一侧都有均匀数量的元素。

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 2022-11-17
    • 2021-12-30
    • 2015-08-26
    • 2020-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    相关资源
    最近更新 更多