package algorithm;
public class MergerSort {
/**
* @param array 要归并的数组,把两部分数组合成一个有序数组放到copy、
* 中,然后由copy再次复制到array中
* @param copy
* @param begin 要归并的其实位置
* @param end末尾位置,
*/
public void merger(int array[],int copy[],int begin,int end)
{
int mid=(begin+end)/2;//中间位置
int i=begin;
int j=mid+1;
int k=0;
while(i<=mid&&j<=end)
{
if(array[i]<array[j])//把两边最小的那个放到copy中
copy[k++]=array[i++];
else
copy[k++]=array[j++];
}
while(j<=end)//如果其中有一个数组已经copy完,则另外一个数组的数依次复制到copy中
copy[k++]=array[j++];
while(i<=mid)
copy[k++]=array[i++];
for(i=begin,k=0;i<=end;i++)
array[i]=copy[k++];
}
public int sort(int array1[],int array2[],int begin,int end)
{
if(begin<end)//递归调用
{
int mid=(begin+end)/2;
sort(array1,array2,begin,mid);//左边有序
sort(array1,array2,mid+1,end);//右边有序
merger(array1,array2,begin,end);//合并左右
}
return 0;
}
public static void main(String[] args) {
int array1[]={2,3,6,8,4,7,9,5,11,1};
int array[]=new int[10];
MergerSort a= new MergerSort();
a.sort(array1, array, 0, array1.length-1);
for(int e=0;e<array1.length;e++)
System.out.print(array[e]+" ");
System.out.println();
}
}
<img src="https://img-blog.csdn.net/20140724104309890" style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);" alt="" />