也就是说,Quicksort在给出已排序的列表时执行得更好吗?我不明白为什么会出现这种情况,但也许我并不完全理解算法。
此外,我们可以快速排序“继续”,同时我们在列表中添加新数据时排序?在我看来,算法需要在开始时将所有数据的全部设置为“工作”。
答案 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%。