原理
归并排序的思想是先拆后合,先让部分有序,再让总体有序
实现
public static void mergerSort(int[] arr){
mergerSortInter(arr,0,arr.length);
}
public static void mergerSortInter(int[] a,int low,int high){
if(low>=high-1){
return;
}
int mid = (low+high)/2;
mergerSortInter(a,low,mid);
mergerSortInter(a,mid,high);
merge(a,low,mid,high);
}
//合并两个有序数组
public static void merge(int[] arr,int low,int mid,int high){
int i = low;
int j = mid;
int length = high - low;
int k = 0;
int[] extra = new int[arr.length];
//选择小的放入extra
while(i < mid && j < high){
if(arr[i]<=arr[j]){
extra[k++] = arr[i];
}else{
extra[k++] = arr[j];
}
}
while(i < mid){
extra[k++] = arr[i];
}
while(j < high){
extra[k++] = arr[j];
}
for(int t = 0;t<length;t++){
arr[low+t] = extra[t];
}
}
复杂度
稳定性
稳定