“小规模可以完全算清:$n=3$ 时 $\lceil\log 2 6\rceil=3$,故任何比较排序最坏至少 $3$ 次比较;插入排序恰以最坏 $3$ 次完成三元素排序,说明该下界在小规模处…”
形式陈述 ​
归并排序把长度
标准数组实现需要
直觉
归并排序把难以整体处理的“排序”分解为两个独立的半区排序和一次稳定线性合并。合并阶段只比较两个有序列表各自尚未取出的最小元素,较小者一旦输出便不可能被另一侧尚未出现的元素越过;这个局部不变式使合并无需回溯,每个元素每层只被处理常数次。每层总合并量为
例子与边界
排序 [4,1,3,2],先得 [1,4] 与 [2,3],再线性合并为 [1,2,3,4]。自然归并排序可利用输入中已有的有序段。归并排序不必原地;声称标准数组版本只需
常见数组实现需要
推论与应用
比较排序提供模型,分治法提供结构,递归式给出成本。归并的顺序访问适合外存模型:内存同时缓冲多段并作多路合并,可减少块传输轮数。它也用于稳定排序、逆序对计数与并行流合并。
主存 merge sort 的
参考资料
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 2, merge sort and recurrence analysis。
- Donald E. Knuth, The Art of Computer Programming, Vol. 3: Sorting and Searching, 2nd ed., Addison-Wesley, 1998,Vol. 3, §5.2.4, sorting by merging。