用C#实现归并排序算法
/// <summary>
/// 实际排序逻辑
/// </summary>
/// <param name="left"></param>
/// <param name="right"></param>
/// <returns></returns>
public static int[] Sort(int[] left, int[] right)
{
//先声明一个新数组
int[] num = new int[left.Length + right.Length];
//生命左侧索引和右侧索引
int leftIndex = 0;
int rightIndex = 0;
//进行循环,往数组里面添加内容
for (int i = 0; i < num.Length; i++)
{
//如果左侧索引值大于左侧的数组长度,那么直接添加右侧的值即可
if (leftIndex >= left.Length)
{
num[i] = right[rightIndex];
rightIndex++;
}
//如果右侧的索引值大于右侧的数组长度,那么直接添加左侧的值即可
else if (rightIndex >= right.Length)
{
//进行添加
num[i] = left[leftIndex];
//左侧索引加一
leftIndex++;
}
//如果左侧值大于右侧的值,那么添加右侧的值
else if (left[leftIndex] > right[rightIndex])
{
//进行添加
num[i] = right[rightIndex];
//右侧索引加一
rightIndex++;
}
else
{
num[i] = left[leftIndex];
leftIndex++;
}
}
return num;
}
/// <summary>
/// 进行分割处理
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
public static int[] MarGe(int[] array)
{
//判断递归条件
if (array.Length < 2) return array;
//确定中间索引值
int mid = array.Length / 2;
//声明左侧数组
int[] left = new int[mid];
//声明右侧数组
int[] right = new int[array.Length - mid];
//接下来对左侧和右侧的数组进行赋值
for (int i = 0; i < array.Length; i++)
{
//利用中间索引值进行赋值
if (i < mid) left[i] = array[i];
else right[i - mid] = array[i];
}
//进行递归操作
return Sort(MarGe(left), MarGe(right));
}