Arrays 合并具有不同长度的k个排序数组

Arrays 合并具有不同长度的k个排序数组,arrays,sorting,merge,Arrays,Sorting,Merge,n是2的幂。给定logn-1排序数组的长度为1,2,4,8,…,n/2,描述将它们合并为一个排序数组的确定性算法。 我想也许应该保持指针指向每个排序数组的第一个元素,将所有的第一个项目插入二进制堆,然后删除min。但是长度不同的事实让我认为这个解决方案可能不是最好的 解决这个问题最有效的方法是什么 合并最小的运行。在本例中,合并大小为{1,2}的运行以创建大小为3的运行。合并大小为{3,4}的管路以创建大小为7的管路。合并大小为{7,8}的管路以创建大小为15。。。等等 在链表上执行自底向上的合

n是2的幂。给定logn-1排序数组的长度为1,2,4,8,…,n/2,描述将它们合并为一个排序数组的确定性算法。 我想也许应该保持指针指向每个排序数组的第一个元素,将所有的第一个项目插入二进制堆,然后删除min。但是长度不同的事实让我认为这个解决方案可能不是最好的


解决这个问题最有效的方法是什么

合并最小的运行。在本例中,合并大小为{1,2}的运行以创建大小为3的运行。合并大小为{3,4}的管路以创建大小为7的管路。合并大小为{7,8}的管路以创建大小为15。。。等等

在链表上执行自底向上的合并排序时会出现这种情况,该排序使用一个小的“列表”(指向节点的指针或引用)数组,其中数组[i]是一个大小为2^i{1,2,4,8,…}的列表。将源列表中的所有节点合并到数组中后,该数组将从数组[0]开始合并到单个列表中


这是一个有趣的问题,但如果我记得我以前的回答正确的话。您需要将它们逐个合并为大小为1的合并数组和大小为2的合并数组,并获得大小为3的数组。将大小为3的数组与大小为4的数组合并..依此类推..这样您每次只比较2个元素,不需要最小堆。