使用15个数字的列表,我需要给出代表最佳和最差情况的列表。它说:“ qs使用列表中的第一项作为关键项”。我不确定是否每次都选择第一项作为枢轴,但这就是我所假设的…。
最好的情况是..我想到了(粗体表示支点,斜体表示大于和小于标记):
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
希望有人可以在这里验证我的工作,如果发现错误,请向我指出如何以及为什么。
Quicksort最佳情况的一个条件是,枢轴始终在中间正确打点(也许在最后阶段除外),因此,绝对是正确的。最重要的是,您希望交换尽可能少,具体的配置取决于实现细节。
一种常见的实现方式是先将数据透视表交换到最后一个位置,然后排列其他元素,以使小于(或等于)数据透视表的元素出现在较大的元素之前,最后将数据透视表(从最后一个位置)交换为第一个较大的元素(然后重复出现)。
另一种方法是在安排之前将枢轴放入第一个插槽中,并与最后一个不超过枢轴的插槽交换。
对于绝对最佳的情况,这些策略需要不同的配置。例如,
4 1 3 5 6 7 2
是“将数据交换到最后一位”变体的最佳方案,而
4 1 3 2 6 5 7
是“支点固定”的最佳案例。
最坏的情况是,枢轴始终移到数组的一端,精确的细节再次取决于实现,但排序或反向排序通常是最坏的情况。