归并分解子问题就是随意的在中间划一刀,不管左右大小
分成两个子数组
子数组中小的先走,大的留下
利用递归合并的方式先将左右两边得数组排序依次扩展数据
样例代码
static void MergeSort(int[] arr,int begin,int end){
if(begin<end){
int indexMid = (begin+end)>>1;
MergeSort(arr,begin,indexMid);
MergeSort(arr,indexMid+1,end);
Merge(arr,begin,indexMid,end);
}
}
static void Merge(int[] arr,int begin,int Mid,int end){
int[] helper = new int[arr.length];
System.arraycopy(arr, begin, helper, begin, (end-begin)+1);
int current = begin;
int left = begin;
int right = Mid + 1;
while(left<=Mid && right <= end){
if(helper[left]<=helper[right]){
arr[current++] = helper[left++];
}
else{
arr[current++] = helper[right++];
}
}
while(left<=Mid){
arr[current++] = helper[left++];
}
}