归并排序

概述

归并排序(Merge Sort)是一种基于分治法的排序算法。其核心过程为:将数组分解为两半,递归排序两半,然后合并两个有序子数组。归并排序在所有情况下(最好、最坏、平均)的时间复杂度均为 ,且是稳定排序。其缺点是需要 的额外空间。

定义

归并排序(Merge Sort)

归并排序遵循分治法的三步:

  1. 分解(Divide):将数组 分为两个子数组 ,其中
  2. 解决(Conquer):递归地对两个子数组进行归并排序
  3. 合并(Merge):将两个已排序的子数组合并为一个有序数组

合并操作在 时间内完成:使用两个指针分别扫描两个子数组,每次取较小的元素放入结果数组。

核心性质

性质描述备注
时间复杂度(所有情况)由递推 决定
空间复杂度需要辅助数组进行合并
稳定性稳定排序(相等元素的相对顺序不变)适合多关键字排序
非原地排序需要额外空间区别于快速排序
适合外部排序顺序访问模式适合磁盘/磁带大数据排序的首选

复杂度分析

递推关系:

主定理,适用情形二

归并排序 vs 快速排序

比较维度归并排序快速排序
时间复杂度(所有情况)期望 ,最坏
空间复杂度(递归栈)
稳定性稳定不稳定
原地排序
缓存性能较差(顺序访问辅助数组)较好(原地操作)
实际速度通常稍慢通常更快

应用场景

  • 外部排序:处理无法全部装入内存的大规模数据
  • 稳定排序需求:需要保持相等元素原始顺序的场景
  • 链表排序:归并排序非常适合链表,不需要额外空间
  • 多路归并:归并思想扩展到 路归并,用于外部排序和数据库

参见