package datastucture;
public class MergeSort {
/**
* 合并两个有序的数组s1和s2
* @param s1
* @param s2
* @return
*/
public static int [] Merge(int [] s1,int [] s2){
int n=s1.length+s2.length;
int [] array=new int[n];
int count1=0,count2=0;
for(int i=0;i<n;i++){
if(count1==s1.length){
array[i]=s2[count2++];
}else if(count2==s2.length){
array[i]=s1[count1++];
}else{
if(s1[count1]<s2[count2]){
array[i]=s1[count1++];
}else{
array[i]=s2[count2++];
}
}
}
return array;
}
/**
* 对数组array进行归并排序
* 归并排序是稳定的排序算法
* 时间复杂度为O(nlg(n))
* @param array
* @return
*/
public static int [] MSort(int [] array){
int n=array.length;
if(n==1) return array;
int [] a1=new int [n/2];
int [] a2=new int [n-n/2];
for(int i=0;i<n/2;i++){
a1[i]=array[i];
}
for(int i=n/2;i<n;i++){
a2[i-n/2]=array[i];
}
int [] a3=MSort(a1);
int [] a4=MSort(a2);
array=Merge(a3,a4);
return array;
}
public static void main(String [] args){
int [] array={12,4,2,5,9,4,3,10,11,3};
for(int i=0;i<10;i++){
System.out.print(" "+array[i]);
}
System.out.println();
array=MergeSort.MSort(array);
for(int i=0;i<10;i++){
System.out.print(" "+array[i]);
}
System.out.println();
}
}