自己凭感觉写的归并排序算法
时间:2010-09-09 来源:月小
下午闲来无事,把归并排序复习了下,并照着自己的理解写出了算法,算是练练脑子,感觉几年不用都秀逗了。
代码 #region 归并排序public static void MergeSort(int[] ary)
{
MergeSort(ary,0,ary.Length-1);
}
public static void MergeSort(int[] ary,int i,int j)
{
if(i>=j) return;
for (int m = 1; m <= j; m = m * 2)
{
for (int n = i; n < j; n = n + m*2)
{
if (n + m * 2 - 1 > j)
{
MSort(ary, n, j, m);
}
else
{
MSort(ary, n, n + m * 2 - 1, m);
}
}
}
}
private static void MSort(int[] ary, int i, int j,int m)
{
if (i == j) return;
else
{
Merge(ary, i,j,m);
}
}
private static void Merge(int[] ary,int i,int j,int m)
{
int l = i + m;
while (l <= j)
{
int tmp = ary[l];//后半段的第一位
int k = l-1; //前半段最后一位
while (k>=i && ary[k] > tmp) //找到比tmp大的数就把它向后挪一位
{
ary[k + 1] = ary[k];
k--;
}
ary[k + 1] = tmp;
l++;
}
}
#endregion
代码应该还有一些优化的空间,先记下来,以后再看。
相关阅读 更多 +