java - 将具有不均匀大小的排序行的二维数组合并为排序的一维数组

标签 java arrays sorting heap mergesort

我想弄清楚如何合并 2D包含几行大小不均匀的 int 数组,在 Java 中将其放入一个已排序的 1D int 数组中。

例如,如果我的二维数组类似于 [[2, 8], [16, 35], [1, 4], [5, 7, 19]]它会合并成一个已排序的一维数组 [1, 2, 4, 5, 7, 8, 16, 19, 35] .

我的函数的标题看起来像这样,半排序的二维数组和排序的一维数组是参数:

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

// Code goes here

}

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

最佳答案

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

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

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

重复直到完成所有数组。

复杂性是 O(nklogn) - 考虑到您正在对 n*k 个元素进行排序,并且需要遍历所有元素,因此非常有效。

关于java - 将具有不均匀大小的排序行的二维数组合并为排序的一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48982426/

相关文章:

java - 如何使用 Tomcat 8 或 9 在部署时自动启动 Hibernate

java - Java 中的枚举中是否有必要使用 toString() ?

arrays - 比较 chai 中的数组

c++ - 对指针列表进行排序 C++ - 没有匹配的函数错误

多重导入和查询后按日期排序

java - 上下文切换的 native 线程无法附加到 JVM

Java Spring Boot 应用程序无法检测到 Mongodb 存储库

javascript - 为什么我的 MinArray 实现不回收未使用的 id?

JavaScript 数组排序

sorting - Vim 按虚拟列排序