Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是“快速排序”;“自适应”;及;在线;?_Algorithm_Sorting_Quicksort - Fatal编程技术网

Algorithm 是“快速排序”;“自适应”;及;在线;?

Algorithm 是“快速排序”;“自适应”;及;在线;?,algorithm,sorting,quicksort,Algorithm,Sorting,Quicksort,也就是说,当给定一个已经排序的列表时,快速排序的性能更好吗?我不明白为什么会出现这种情况,但也许我不完全理解算法 此外,当我们在排序时向列表中添加新数据时,快速排序能否“继续”?在我看来,算法在开始时需要所有数据的完整集合才能“工作” 当给定一个已经排序的列表时,快速排序的性能更好吗 我认为quicks sort的性能主要取决于在每个步骤中选择的枢轴元素。如果选定的枢轴元素可能是列表中最小或最大的元素,则情况最糟糕 快速排序“继续”,同时向列表中添加新数据 分类 是的,快速排序不是自适应的。这是

也就是说,当给定一个已经排序的列表时,快速排序的性能更好吗?我不明白为什么会出现这种情况,但也许我不完全理解算法

此外,当我们在排序时向列表中添加新数据时,快速排序能否“继续”?在我看来,算法在开始时需要所有数据的完整集合才能“工作”

当给定一个已经排序的列表时,快速排序的性能更好吗

我认为quicks sort的性能主要取决于在每个步骤中选择的枢轴元素。如果选定的枢轴元素可能是列表中最小或最大的元素,则情况最糟糕

快速排序“继续”,同时向列表中添加新数据 分类

是的,快速排序不是自适应的。这是快速排序的特性

当给定一个已经排序的列表时,快速排序的性能更好吗

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

当我们在排序时向列表中添加新数据时,快速排序能否“继续”


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

当快速排序的枢轴选择是随机的时,它的运行时间为O(n lg n),其中n是数组的大小。如果按排序顺序选择数据透视,则其运行时将降级为O(n^2)。无论是从左侧、右侧、中间还是随机选择轴,这都无关紧要,因为可以(如果不可能)按排序顺序选择轴

避免这种情况的唯一方法是通过使用诸如“三个中间值”之类的技术来确保枢轴不整齐


根据Robert Sedgewick,Algorithms,Addison-Wesley Publishing Company,1988年,第124页,如果您使用三位数技术选择轴并停止小分区的递归(大小从5到25;这会使数组未排序,但可以通过插入排序快速完成)然后QueQuad将总是O(n LG n),而且比普通QuasRoad更快地运行20%。

这是什么来源?“使用中间”-我想你是指中值,如果你总是使用数组中间的元素,我们可以构造最坏的情况,没有问题。是的,我们可以为它构造最坏的情况,但是它们比排序数组的可能性要小得多,在较大的数组中概率非常小。@G.Bach如果您使用median,那么您可以保证
O(logn)
迭代,但quicksort不能保证这一点。快速排序是
O(n^2)
。每次查找中位数比可能的少量额外迭代更昂贵。@Kevin“它们比排序数组的可能性要小得多”-我非常怀疑,我希望对于所有类型的策略“在数组中取第k个元素”,最坏情况下的排列数完全相同。除非你所说的“可能”是指其他意思。@G.Bach当然,最坏情况下的排列数是相同的,是的,但我坚持认为,在实践中,对于一般实现(例如
qsort()
)而言,选择中间最坏情况的数组比(几乎)排序的数组的可能性要小得多。