归并排序:
定义:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
Recursion Way:
public int[] Merge(int[] left, int[] right)
{
int[] result = new int[left.Length + right.Length];
int leftIndex = 0;
int rightIndex = 0;
int resultIndex = 0;
while (leftIndex < left.Length && rightIndex < right.Length)
{
if (left[leftIndex] < right[rightIndex])
{
result[resultIndex++] = left[leftIndex++];
}
else
{
result[resultIndex++] = right[rightIndex++];
}
}
while (leftIndex < left.Length)
{
result[resultIndex++] = left[leftIndex++];
}
while (rightIndex < right.Length)
{
result[resultIndex++] = right[rightIndex++];
}
return result;
}
int[] MergeSort(int[] data)
{
if (null == data || data.Length <= 1)
{
return data;
}
int middle = data.Length >> 1;
int[] left = new int[middle];
int[] right = new int[data.Length - middle];
int[] result = new int[data.Length];
for (int i = 0; i < data.Length; i++)
{
if (i < middle)
{
left[i] = data[i];
}
else
{
right[i - middle] = data[i];
}
}
left = MergeSort(left);
right = MergeSort(right);
result = Merge(left, right);
return result;
}