Quicksort与就地合并排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quicksort与就地合并排序相关的知识,希望对你有一定的参考价值。
我正在研究Quicksort是否比Merge Sort更好,大多数消息来源都认为Quicksort更好,因为它是就地的,而Merge Sort则不是。但是,存在就地合并排序算法,它使“它需要额外空间”参数无效。那么哪个更好,Quicksort还是In-place Merge Sort?
PS:当我说得更好时,我的意思是更快,因为空间对于这些类型中的任何一种都不是问题。
编辑:从不合适的合并排序切换到就地合并排序时,是否有任何速度丢失?
现场合并排序的常见实现是递归的,并且quicksort是递归的,或者两者都使用某种形式的堆栈,因此使用堆栈空间,O(log2(n))用于合并排序,而quicksort也可以限制为O (log2(n))通过在分区步骤之后仅在较小部分上使用递归并且对于大部分循环,但是时间复杂度仍然可以是O(n ^ 2)最坏情况。
常见的合并排序更慢,也不稳定。合并排序的版本已经到位且稳定,但这些版本很慢。
常见的合并排序算法是对数组的后半部分和第一个四分之一进行排序,使数组的第二个四分之一未排序。然后第一季度和第二季度从第二季度开始合并到阵列中。每次合并一个元素而不是移动它时,该元素都会被交换,那么第二季度中未排序的数据在合并步骤中会分散到排序的部分(这就是为什么这个算法不是“稳定”的原因) )。合并步骤完成后,所有无序元素都会在第一季度结束,并对数组的其余部分进行排序。接下来,对数组的前八分之一进行排序,然后将前八个和后三个四分之一合并到数组的第二个八分之一,将第一个八分之一与未分类数据分开,并对数组的其余部分进行排序。继续此过程,直到阵列左侧只有两个未排序的元素。使用插入排序将这两个元素移动到位。
请注意,这不是一个稳定的排序。
更新 - 块合并排序是稳定的,并且具有时间复杂度O(n log(n)),但是使用较低的顺序因子使其比使用第二个缓冲区的常规合并排序慢。如果存在至少2·sqrt(n)个唯一值,则它最有效,这使得它们可以重新排序以提供阵列的工作区域并保持稳定。
https://en.wikipedia.org/wiki/Block_sort
以上是关于Quicksort与就地合并排序的主要内容,如果未能解决你的问题,请参考以下文章