一种多向合并通常更好.考虑三个小文件:
a1
a2
a3
Run Code Online (Sandbox Code Playgroud)
和
b1
b2
b3
Run Code Online (Sandbox Code Playgroud)
最后
c1
c2
c3
Run Code Online (Sandbox Code Playgroud)
如果你与a和合并b,我们留下(说)
a1
b1
a2
b2
b3
a3
Run Code Online (Sandbox Code Playgroud)
和
c1
c2
c3
Run Code Online (Sandbox Code Playgroud)
最终合并将创建排序列表,但请注意在最终合并中我们必须再次访问a和b项目.正是这种重新合并在级联双向合并中浪费了.
你可以做的是单个多路合并.但是,要小心你是如何做到的.具体来说,避免扫描每个光标的天真双循环以查看哪个具有最小值.请改用最小堆.这将带来复杂性O(n log n).