定义:
假设一个序列有n个记录,可以被看成是n个长度为1的子序列,将这些子序列两两归并,等到一个长度为2的子序列,再两两归并,直到子序列长度为n,就得到了一个有序的序列。
时间复杂度:O(nlogn)
实现:
1、递归实现
public class merge {
public void sort(int[] arr){
int[] newarr= new int[arr.length];
msort(arr,newarr,0,arr.length-1);
}
/**
*递归实现
* @param arr
* @param begin
* @param end
* @return
*/
private void msort(int[] arr,int[] newarr,int begin,int end){
int[] tarr=new int[arr.length];
if(begin == end){
newarr[begin]=arr[begin];
}else{
int mid=(begin+end)/2;
msort(arr,tarr,begin,mid);
msort(arr,tarr,mid+1,end);
mergearr(tarr,newarr,begin,mid,end);
}
SortUtils.print(newarr);
}
private void mergearr(int[] arr,int[] newarr,int