具体原理部分百度或是参见:
数据结构与算法-C语言版 175-177页
这里给出c#的实现:
/// <summary>
/// 归并算法
/// </summary>
/// <param name="a">输入数组</param>
/// <param name="left">左边索引</param>
/// <param name="right">右边索引</param>
static void MergeSort(ref int[] a,int left,int right)
{
if(left<right)
{
int center =(left+right)/2;
MergeSort(ref a, left, center);
MergeSort(ref a, center + 1, right);
merge(ref a, left, center + 1, right);
}
}
/// <summary>
/// 分治中的“治”即合并两个数组
/// </summary>
/// <param name="a">原始数组</param>
/// <param name="left">要合并的左边</param>
/// <param name="rightStart">右边起始索引</param>
/// <param name="end">要合并索引的右边</param>
static void merge(ref int[] a,int left,int rightStart,int end)
{
int i = left, j = rightStart;
int k = 0;
int[] b = new int[end - left + 1];
while(i < rightStart && j <= end)
{
if (a[i] < a[j]) b[k++] = a[i++];
else b[k++] = a[j++];
}
while(i<rightStart)
{
b[k++] = a[i++];
}
while(j<=end)
{
b[k++] = a[j++];
}
for(int t=0;t<b.Length;t++)
{
a[t + left] = b[t];
}
}