归并排序(Merge Sort)原理详解
归并排序是一种基于分治法(Divide and Conquer)的高效排序算法,由冯·诺依曼于1945年提出。它的核心思想是将大问题分解为小问题,解决小问题后再合并结果。
核心原理
1. 分治策略(Divide and Conquer)
- 分(Divide):将无序数组递归地拆分成更小的子数组,直到每个子数组只有一个元素(此时可视为已排序)
- 治(Conquer):将相邻的有序子数组合并成更大的有序数组
- 合(Combine):重复合并过程,直到整个数组有序
2. 合并过程(关键步骤)
合并两个已排序的子数组 [left…mid] 和 [mid+1…right]:
- 创建临时数组存放合并结果
- 使用两个指针分别指向两个子数组的起始位置
- 比较指针所指元素,将较小的元素放入临时数组
- 移动指针,重复比较过程
- 将剩余元素直接复制到临时数组末尾
- 将临时数组复制回原数组对应位置
算法步骤详解
-
递归分解:
- 计算中点 mid