归并排序的合并逻辑适用于海量有序数组的流式合并——通过双指针+分块读取(如4KB或1000个元素),仅维护当前游标与少量缓存,避免全量加载,支持中断恢复与低内存占用。

直接用归并排序的合并逻辑处理两个海量有序数组,核心不是“重排序”,而是“高效串流合并”——它天然适配海量数据场景,关键在避免一次性加载、减少内存占用、支持分块与中断恢复。
用双指针+流式读取代替全量载入
海量数组通常无法全部装入内存。实际做法是把数组看作数据流(如文件、数据库游标、网络分片),只维护两个“当前游标位置”和少量缓存:
- 每次只从两个源中各读取一小批(例如 4KB 或 1000 个元素)到内存缓冲区
利用外部归并降低内存峰值
当单机内存仍不足时,可退化为“外部归并”模式:
- 将每个海量数组按固定大小(如 10MB)切分为多个已排序的块文件
- 先对每块内部做轻量校验(确认升序),不需重排
- 启动 k 路归并(k = 块总数),但只维护 k 个文件的当前最小元素(用最小堆优化)
- 每次从堆顶取出最小值,输出,并从对应文件读入下一个元素,重新堆化
- 空间复杂度降为 O(k),远低于 O(总长度)
支持原地合并与反向归并(针对特定存储结构)
若目标数组有预留空间(如力扣题中 nums1 长度为 m+n,后 n 位为空),可逆向双指针,从末尾开始填:
- 设 i = m−1, j = n−1, k = m+n−1
- 比较 nums1[i] 和 nums2[j],较大者填入 nums1[k],对应指针前移
- 优势:无需额外空间;不会覆盖未处理元素;适合内存受限且目标可写场景
- 当 j
加入断点续传与校验机制
海量合并过程长,需容错:
- 每输出 N 个结果,记录当前 i、j 偏移量及已写入位置到 checkpoint 文件
- 异常中断后,可从最近 checkpoint 恢复,而非重头开始
- 启用哈希校验(如对每万条输出计算 CRC)或抽样比对,确保合并逻辑未因边界条件出错
- 对重复键、NaN、空值等异常数据设置跳过/标记策略,避免阻塞整个流程

















