一 算法描述
归并排序算法(Merge Sort)是一种采用分治法(Divide-And-Conquer)的排序算法。分治策略将原问题划分为n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后在合并其结果,就得到原问题的解。分治模式在每一层递归上都包含三个步骤:分解、解决、合并。
具体到归并算法,三个步骤分别为:
分解:将n个元素分成各含n/2个元素的子序列。
解决:用归并排序法对两个子序列递归的排序。
合并:合并两个已排序的子序列以得到排序结果。
下图是利用归并算法对一个数组进行排序的执行过程(图片截取自《算法导论》):
二 算法实现
1 用于整数数组的升序排序
public static void MergeSort(int[] array)
{
MergeSort(array, 0, array.Length - 1);
}
private static void MergeSort(int[] array, int p, int r)
{
if (p < r)
{
int q = (p + r) / 2;
MergeSort(array, p, q);
MergeSort(array, q + 1, r);
Merge(array, p, q, r);
}
}
private static void Merge(int[] array, int p, int q, int r)
{
int[] L = new int[q - p + 2];
int[] R = new int[r - q + 1];
L[q - p + 1] = int.MaxValue;
R[r - q] = int.MaxValue;