算法释义:归并排序是一种分治算法,它采用分而治之的策略,将待排序的数组分成更小的部分,递归地对这些部分进行排序,然后将排序好的部分合并起来。它是一种比较稳定的排序算法。排序过程总结如下:
1、分解:数组拆分为若干子数组。
2、递归:对分解后的子数组进行归并排序。
3、合并:将排好序的子数组进行合并。
各位伙伴,我们熟悉了归并算法的原理,接下来看C#如何实现归并算法,代码如下:
cs
public static void Main()
{
int[] array = { 12, 11, 13, 5, 6, 7 };
Console.WriteLine("Given Array");
PrintArray(array);
array = MergeSort(array, 0, array.Length - 1);
Console.WriteLine("\nSorted array");
PrintArray(array);
}
// 归并排序的主要函数
public static int[] MergeSort(int[] array, int left, int right)
{
if (left < right)
{
// 找到中间索引
int middle = (left + right) / 2;
// 分别对左右两半进行归并排序
MergeSort(array, left, middle);
MergeSort(array, middle + 1, right);
// 合并两个已排序的半部分
Merge(array, left, middle, right);
}
return array;
}
// 合并两个子数组的函数
public static void Merge(int[] array, int left, int middle, int right)
{
// 临时数组
int[] tempArray = new int[(right - left) + 1];
int leftIndex = left; // 左侧数组的起始索引
int rightIndex = middle + 1; // 右侧数组的起始索引
int tempIndex = 0; // 临时数组的索引
// 合并过程
while (leftIndex <= middle && rightIndex <= right)
{
if (array[leftIndex] <= array[rightIndex])
{
tempArray[tempIndex++] = array[leftIndex++];
}
else
{
tempArray[tempIndex++] = array[rightIndex++];
}
}
// 复制剩余的左侧元素
while (leftIndex <= middle)
{
tempArray[tempIndex++] = array[leftIndex++];
}
// 复制剩余的右侧元素
while (rightIndex <= right)
{
tempArray[tempIndex++] = array[rightIndex++];
}
// 将临时数组的内容复制回原数组
for (int i = 0; i < tempArray.Length; i++)
{
array[left + i] = tempArray[i];
}
}
// 打印数组的函数
public static void PrintArray(int[] array)
{
foreach (int item in array)
{
Console.Write(item + " ");
}
Console.WriteLine();
}