合并多个数组的计数排序

时间:2018-09-12 11:42:04

标签: arrays sorting counting

我被要求创建一种算法,该算法采用M个数组,所有数组的范围都在1-k,它们的大小组合为'n',然后将它们全部以O(k + n)的形式排序(与计数排序相同) )。天真的计数排序将花费O(km + n)。

要克服的显而易见的枪管是在辅助阵列上移动m次。我提供了以下解决方案,但他说我的复杂度为O(km + n): 我们将为每个声明其自己的数字集的数组创建vector_i。例如,数组“ 1,5,4,1,2”将表示为<2,1,0,1,1>。 然后,对于每个数字,“附加”值以创建m个长度的k个数字。现在,当我们经过计数数组中的每个单元格时,我们将立即将正确数量的“ i”值数字放入正确的数组中。 (每个数组中都有指向我们当前位置的指针。)

他可能会误解我的意思,但对我来说似乎很清楚O(k + n)。他认可的一个答案将所有数组组合为一个,并在每个元素上放置一个标记,指出该数组属于哪个数组。

我对自己的灵魂非常有信心,但我很想听听评论,以确保我没有记错。 谢谢,非常感谢。

1 个答案:

答案 0 :(得分:0)

  

我们将为每个数组创建vector_i,以声明自己的数字集。

由于您需要查看n个元素中的每个元素来填充这些矢量,因此第一部分将花费O(n)时间。

  

现在,当我们经过计数数组中的每个单元格时,我们将立即将正确数量的“ i”值放入正确的数组中。

您为m个数组中的每个数组创建一个向量,因此有m个向量。您还说过,每个向量都是in range 1-k。这意味着您新创建的数组中最多有k*m个项目。由于您一次要遍历这些向量来填充原始数组,因此这部分的时间复杂度为O(km)

这使总时间复杂度达到O(km + n)