class Program
{
static void Main(string[] args)
{
int[] arr = {23,1235,89,145,2896,5,98 ,10};
int l = 0;
int r = 7;
MergeSort(arr,l,r);
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
//将2个有序数组合并成一个新的有序数组
static void Merge(int[] arr ,int L,int m,int r)
{
//左边数组长度
int leftLength = m - L;
//右边数组长度
int rightLength = r - m + 1;
//左边数组
int[] left=new int[leftLength];
//右边数组;
int[] right=new int[rightLength];
//数组赋值
for (int i = L; i < m; i++)
{
left[i - L] = arr[i];
}
for (int i = m; i <=r; i++)
{
right[i - m] = arr[i];
}
//将左右数组大小重新排序放入原来的数组中
int a = 0;int b = 0;int k = L;
while (a<leftLength&&b<rightLength)
{
if (left[a] < right[b])
{
arr[k++] = left[a++];
}
else
{
arr[k++] = right[b++];
}
}
while (a<leftLength)
{
arr[k++] = left[a++];
}
while (b<rightLength)
{
arr[k++] = right[b++];
}
}
//如果左边数组或者右边不是有序,继续分割
static void MergeSort(int[] arr,int L,int r)
{
if (L==r)
{
return;
}
else
{
int m = (L + r) / 2;
MergeSort(arr, L, m);
MergeSort(arr, m + 1, r);
Merge(arr, L, m + 1, r);
}
}
}
九大排序之一归并排序
最新推荐文章于 2024-06-04 16:36:07 发布