Quicksort是“自适应”还是“在线”?

时间:2013-10-08 18:57:36

标签: algorithm sorting quicksort

也就是说,Quicksort在给出已排序的列表时执行得更好吗?我不明白为什么会出现这种情况,但也许我并不完全理解算法。

此外,我们可以快速排序“继续”,同时我们在列表中添加新数据时排序?在我看来,算法需要在开始时将所有数据的全部设置为“工作”。

3 个答案:

答案 0 :(得分:1)

  

Quicksort在给出已经排序的列表时执行得更好吗?

不,实际上它通常被教导的方式(使用第一个元素作为枢轴)已经排序(或接近排序)的列表是最坏的情况。但是,使用中间或随机元素作为枢轴可以减轻这种影响。

  当我们在分拣时将新数据添加到列表中时,

可以快速“继续”吗?

不,你的直觉是正确的,你需要从一开始就拥有整个数据集。

答案 1 :(得分:0)

  

当给出已经排序的列表时,Quicksort是否执行得更好

我认为快速排序的性能主要取决于每一步中枢轴元素的选择。如果选择的枢轴元素可能是列表中的最小元素或最大元素,那将是最糟糕的

  

快速排序“继续”,同时我们将新数据添加到列表WHILE   分拣?

是快速排序不适应。这是快速排序的属性。

答案 2 :(得分:0)

Quicksort,当它的枢轴选择是随机的时,其运行时间为O(n lg n),其中n是数组的大小。如果它的枢轴选择按排序顺序,则其运行时间降级为O(n ^ 2)。无论您是从左侧,右侧,中间还是随机选择枢轴,都没有关系,因为如果不可能的话,可以按排序顺序选择枢轴。

避免这种情况的唯一方法是通过使用诸如“三个中位数”之类的技术来保证枢轴顺序不变。"

根据Robert Sedgewick,Algorithms,Addison-Wesley Publishing Company,1988,第124页,如果你使用三项中位技术来选择枢轴并停止小分区的递归(大小从5到25;这个将数组保留为未排序但您可以使用插入排序快速完成它)然后快速排序将始终为O(n lg n),此外,运行速度比普通快速排序快20%。