public class mergesort {
public static int[] my_mergesort(int[] a,int N) //统一的方法入口
{
return mysort(a,0,N-1);
}
private static int[] mysort(int[] a,int left,int right)
{
int mid=(left+right)/2;
if(left<right)
{
mysort(a,left,mid);
mysort(a,mid+1,right);
guibing(a,left,mid,right);
}
return a;
}
//两个有序数组的归并
private static void guibing(int[] a,int left,int mid,int right) //两个数组分别为left-mid和mid+1-right
{
int[] temp=new int[right-left+1];
int i=left;
int j=mid+1;
int k=0;
while(i<=mid&&j<=right)
{
if(a[i]<=a[j])
{
temp[k++]=a[i++];
}
else
{
temp[k++]=a[j++];
}
}
while(i<=mid)
{
temp[k++]=a[i++];
}
while(j<=right)
{
temp[k++]=a[j++];
}
for(int p=0;p<k;p++)
{
a[left+p]=temp[p];
}
}
}