using System;
namespace 合并排序
{
class Program
{
static int[] num = new int[] { 6, 8, 12, 4, 5, 94, 26, 13, 22 };
static void Main(string[] args)
{
MergeSort(num, 0, num.Length - 1);
foreach (var v in num)
Console.Write(v + " ");
Console.ReadKey();
}
static void MergeSort(int[] num, int low, int high)
{
if (low < high)
{
int mid = (low + high) / 2;
MergeSort(num, low, mid);
MergeSort(num, mid + 1, high);
Merge(num, low, high, mid);
}
}
/// <summary>
/// 合并
/// </summary>
/// <param name="num"></param>
/// <param name="low"></param>
/// <param name="high"></param>
/// <param name="mid"></param>
static void Merge(int[] num, int low, int high, int mid)
{
int[] num2 = new int[high - low + 1];//辅助数组 方便排序
int i = low;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= high)
{
if (num[i] < num[j])
{
num2[k] = num[i];
k++;
i++;
}
else
{
num2[k] = num[j];
k++;
j++;
}
}//按从小到大放入num2数组中
//将剩下的元素复制进num2数组
while (i <= mid)
{
num2[k] = num[i];
k++;
i++;
}
while (j <= high)
{
num2[k] = num[j];
k++;
j++;
}
//将排序完的元素放回num
foreach (var v in num2)
{
num[low] = v;
low++;
}
num2 = null;
}
}
}
归并排序
最新推荐文章于 2023-03-31 19:05:54 发布