public class MergeSort {
public static void main(String[] args) {
int[] a={1,3,5,6,7};
int[] b={2,4,8,9,10};
getResult(a,b);
}
//合并兩個有序數組
public static int[] mergeArray(int[] a,int[] b){
int a_length=a.length;
int b_length=b.length;
int[] c=new int[a_length+b_length];
int i=0,j=0,k=0; //i 為a數組的元素下標,j為b數組,k為新數組
while(i<a_length&&j<b_length){
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
//哪個數組還有元素未添加,則添加進c數組即可
while(i<a_length) c[k++]=a[i++];
while(j<b_length) c[k++]=b[j++];
return c;
}
//非有序數組,先拆分到只剩下一個元素 再進行有序合并
public static int[] mergeSort(int[] a,int start,int end){
if(start<end){
int mid=(start+end)/2; //分區
int left[]=mergeSort(a,start,mid);
int right[]=mergeSort(a,mid+1,end);
return mergeArray(left,right);
}else{//當只有一個元素時,直接返回
int left[]=new int[1];
left[0]=a[start];
return left;
}
}
public static void getResult(int[] a,int[] b){
int[] left=mergeSort(a,0,a.length-1); //第一個數組通過遞歸分區排序
int[] right=mergeSort(b,0,b.length-1);//遞歸分區排序 再合區
int[] result=mergeArray(a,b); // 采用有序數組歸并
for(int i=0;i<result.length;i++)
System.out.println(result[i]);
}
}