k排序数组的运行时间?

时间:2018-02-27 18:51:29

标签: algorithm mergesort

假设我们给出了k个排序数组,每个数组都有n个元素,我们希望将它们组合成一个kn元素数组。

我的方法:我的方法是重复使用Merge子程序,首先合并前两个数组,然后将结果与第三个数组合并,然后合并第四个数组,依此类推,直到我合并在第k个和最后一个输入数组中。我的问题是这个连续合并算法的运行时间是什么,作为k和n的函数,忽略常数因子和低阶项?

合并子程序:

 i := 1 
 j := 1 
 for k := 1 to n do 
   if C[i] <D [j] then 
      B[k] :=C[i] 
      i := i +1 
   else 
      B[k] :=D[j] 
      j := j +1

1 个答案:

答案 0 :(得分:1)

运行时间为O(k^2 * n)。原因是i第3次合并需要花费O(i*n + n)时间,并且与k/2进行大约i > k/2次合并。

有一个原因是在经典的mergesort中我们分别合并了每一半的数组,然后才将两个排序的数组合并在一起......