你能在quicksort中选择你想要的任何支点吗?

时间:2016-08-09 15:34:09

标签: arrays sorting pivot quicksort

我最近在Youtube上看到了关于quicksort如何工作的Quick Sort - Computerphile视频(在纸上),我有一个问题。想象一下,我们有一个包含例如"27,6,19,2,15,9,10"的数组。首先,我选择10作为数据透视表,数组如下所示:9,2,6 |10| 27,19,15。然后,我选择6作为左侧未排序数组的轴,它变为2 |6| 9,对于右侧,我选择19作为轴,右侧未排序的数组变为15 |19| 27。问题是:我可以选择任何我想让工作变得更容易的支点(就像我在这个例子中所做的那样)或者还有更多的东西吗?

编辑:如果我选择27作为数据透视而不是19数组将是什么?

3 个答案:

答案 0 :(得分:2)

您可以选择任何值,使分区的任何部分都不为空,即不小于最小值,也不大于最大值。 (值不必是数组元素之一。)

分区越平衡(因此越接近中位数)越好。即使这从未完成,算术平均值也可以。

一个常见的策略是三个的中位数(第一个,中心和最后一个元素)。

答案 1 :(得分:1)

查看this问题和答案。

有一个讨论表明,在大多数情况下,选择随机数据透视可能是最佳选择。

答案 2 :(得分:1)

原则上你可以把任何数组元素作为支点;算法会起作用。实际上,如果选择数组中最小或最大的元素作为数据透视,Quicksort算法的一次传递将实现很少。假设您以随机顺序从1到100的数字并选择1作为枢轴,那么您仍将有一个包含99个元素的数组进行排序。最糟糕的情况是,如果数组已经排序,则将第一个数组元素选为枢轴。