感谢morewindows的文章,http://blog.csdn.net/morewindows/article/details/6678165
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序
{
class MergeSortClass
{
public bool MergeSort(int[] a,int n) //注意这里传入的是n
{
int[] temp = new int[n] ; // 注意这里传入的是n
print(a,n);
if (temp == null) return false;
mergesort(a, 0, n-1, temp); //注意这里传入的n-1
print(a,n);
return true;
}
private void mergesort (int[] a, int first, int last, int[] temp)
{
if (first < last)
{
int middle = (first+last)/2;
mergesort(a, first, middle,temp);
mergesort(a, middle + 1, last,temp);
merge(a, first, middle,last, temp);
}
}
private void merge(int[] a, int first, int middle, int last, int[] temp)
{
int i = first, j = middle + 1;
int m = middle, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j]) temp[k++] = a[i++];
else temp[k++] = a[j++];
}
while (i <=m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (int t = 0; t < k; t++)
a[first + t] = temp[t];
}
private void print(int[] a, int n)
{
for (int i = 0; i <n; i++)
{
Console.WriteLine(a[i]);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序
{
class MergeSortClass
{
public int count=0;
public int MergeSort(int[] a,int n)
{
int[] temp = new int[n] ;
print(a,n);
//if (temp == null) return false;
mergesort(a, 0, n-1, temp);
print(a,n);
return count;
}
private void mergesort (int[] a, int first, int last, int[] temp)
{
if (first < last)
{
int middle = (first+last)/2;
mergesort(a, first, middle,temp);
mergesort(a, middle + 1, last,temp);
merge(a, first, middle,last, temp);
}
}
private void merge(int[] a, int first, int middle, int last, int[] temp)
{
int i = first, j = middle + 1;
int m = middle, n = last;
int k = 0;
while (i <= m && j <= n)
{
if (a[i] <= a[j]) temp[k++] = a[i++];
else
{
temp[k++] = a[j++];
count++;
}
}
while (i <= m)
{
temp[k++] = a[i++];
count++;
}
while (j <= n)
{
temp[k++] = a[j++];
//count++;
}
for (int t = 0; t < k; t++)
a[first + t] = temp[t];
}
private void print(int[] a, int n)
{
for (int i = 0; i <n; i++)
{
Console.Write("{0} ",a[i]);
}
Console.WriteLine("\t");
}
}
}