快速排序的最佳案例场景示例(需要有人检查我的答案是否正确)

时间:2012-02-04 13:19:12

标签: algorithm sorting

使用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

希望有人可以在这里验证我的工作,如果错了,请指出我是如何以及为什么。

2 个答案:

答案 0 :(得分:5)

Quicksort最佳情况的一个条件是枢轴总是在中间位置正确(除非在最后阶段),所以绝对是正确的。最重要的是,您希望尽可能少的交换,其精确配置取决于实现细节。

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

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

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

4 1 3 5 6 7 2

是'swap pivot into last place'变体的最佳案例场景,而

4 1 3 2 6 5 7

是'pivot stay put'的最佳案例。

最糟糕的情况是,当枢轴总是进入阵列的一端时,精确的细节再次取决于实现,但排序或反向排序通常是最坏的情况。

答案 1 :(得分:0)

对我而言看起来是正确的。如果您使用带有第一个元素的快速排序作为枢轴,那么您希望第一个元素是数组的中间值。理想的枢轴每侧都有均匀的元素。