码迷,mamicode.com
首页 > 编程语言 > 详细

C#归并排序

时间:2017-10-16 16:31:14      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:back   左右   turn   合并   int   ret   ram   line   round   

class Program
{
static void Main(string[] args)
{
int[] arr = { 4, 50, 20, 79, 20, 24, 26, 27 };//试验
int L = 0;
int m = 4;
int r = 7;
MergeSort(arr, L, r);
foreach (var item in arr)
{
Console.WriteLine (item);
}

Console.ReadKey();
}
//将两个有序数组合并成一个新的有序数组
static void Merge(int []arr,int L,int m,int r)
{
int leftlength = m - L;//左边数组长度下标
int rightlenght = r - m+1;//右边数组长度下标
int[] left=new int [leftlength ];//左边数组
int[] right=new int[rightlenght];//右边数组
//数组赋值
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<rightlenght)
{
if (left[a] < right[b])
{
arr[k++] = left[a++];
}
else
{
arr[k++] = right[b++];
}
}
while (a<leftlength )
{
arr[k++] = left[a++];
}
while (b<rightlenght)
{
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);
}

}
}

C#归并排序

标签:back   左右   turn   合并   int   ret   ram   line   round   

原文地址:http://www.cnblogs.com/CUnity/p/7677089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!