将具有不均匀大小的排序行的2D阵列合并到分类的1D阵列中

时间:2018-02-26 06:09:23

标签: java arrays sorting heap mergesort

我试图弄清楚如何将包含几行不均匀大小的2D int数组合并到Java中的一个已排序的1D int数组中。

例如,如果我的2D数组类似于[[2, 8], [16, 35], [1, 4], [5, 7, 19]],它将合并为已排序的1D数组[1, 2, 4, 5, 7, 8, 16, 19, 35]

我的函数的标题如下所示,半排序的2D数组和被分类的1D数组是参数:

public void mergeTo1D(int[][] sorted, int[] origArray) {

// Code goes here

}

我在这里看到了一些使用min-heap的解决方案,但我不知道如何实现或使用它,因为我刚刚开始学习数据结构。

1 个答案:

答案 0 :(得分:2)

我相信您可以使用k向合并(这是合并排序的概括)。

这里具有n个排序列表,最大大小为k。 保留包含每个列表中最小元素的最小堆。另外,保留结果列表。

然后,每次弹出堆的最小值。将此数字设为x,并说它是从第i行获取的。将x附加到结果列表,然后将第i行中的下一个数字添加到最小堆中(如果存在该数字)

重复此操作,直到遍历所有阵列为止。

复杂度为O(n k logn)-考虑到要对n * k个元素进行排序,并且需要遍历所有元素,效率非常高。