我最近在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数组将是什么?
答案 0 :(得分:2)
您可以选择任何值,使分区的任何部分都不为空,即不小于最小值,也不大于最大值。 (值不必是数组元素之一。)
分区越平衡(因此越接近中位数)越好。即使这从未完成,算术平均值也可以。
一个常见的策略是三个的中位数(第一个,中心和最后一个元素)。
答案 1 :(得分:1)
查看this问题和答案。
有一个讨论表明,在大多数情况下,选择随机数据透视可能是最佳选择。
答案 2 :(得分:1)
原则上你可以把任何数组元素作为支点;算法会起作用。实际上,如果选择数组中最小或最大的元素作为数据透视,Quicksort算法的一次传递将实现很少。假设您以随机顺序从1到100的数字并选择1作为枢轴,那么您仍将有一个包含99个元素的数组进行排序。最糟糕的情况是,如果数组已经排序,则将第一个数组元素选为枢轴。