2路合并排序和合并排序

时间:2019-06-21 03:57:08

标签: algorithm mergesort

2向合并排序与递归合并排序有何不同?


假设有5个数字要排序8,9,1,6,4 在合并排序中,我们像这样划分 步骤1:{8,9,1} {6,4}

Step2:{8,9} {1} {6} {4}

步骤3:{8} {9} {1} {6} {4}

现在合并

第4步:{8,9} {1} {4,6}

Step5:{1,8,9} {4,6}

第6步:{1,4,6,8,9}

但是以2种方式进行合并排序时,我们将数组分别划分为2个元素(但是根据Wikipedia,在合并之前需要对每2个元素部分进行排序。https://en.wikipedia.org/wiki/K-way_merge_algorithm)因此,它也从单个元素开始合并它们 对? 因此,数组的步骤:8,9,1,6,4

第1步:{8,9} {1,6} {4} [最后是奇数元素合并]

步骤2:{1,6,8,9}。 {4}

Step3:{1,4,6,8,9}

因此,此处的步骤数减少了。那么它将是什么算法呢? 2向合并排序合并排序比合并排序更有效吗?

1 个答案:

答案 0 :(得分:2)

  

2路合并排序合并排序是否比合并排序更有效?

迭代式双向合并排序的另一个名称是自下而上的合并排序,而递归合并排序的另一个名称是自上而下的合并排序。

通常,自下而上的优化合并排序比自上而下的优化合并排序效率更高。自上而下的合并排序对数组的递归“拆分”所生成的索引执行O(n)堆栈操作。如果n不是2的幂,则自下而上的合并排序会进行更多的比较和移动,但小于自上而下的合并排序的堆栈操作开销。对于大型阵列,差异小于5%。

对于混合插入/合并排序,它对 m 个元素的 n / m 组使用插入排序,自下而上的合并排序可以调整 m 来处理n并非2的幂。

自上而下的合并排序主要用于学习。尽管性能和堆栈空间上的差异很小,但是大多数库还是使用一些自下而上的合并排序方式来实现稳定排序。