归并排序优化
接上篇java实现归并排序
private static<T extends Comparable<T>> void __mergeSort(T arr[], int l, int r) {
if(l>=r){
return;
}
int mid = (l+r)/2;
__mergeSort(arr, l, mid);
__mergeSort(arr, mid+1, r);
__merge(arr, l, mid, r, new MyComparator<>());
}
变为
private static<T extends Comparable<T>> void __mergeSort(T arr[], int l, int r) {
if(r-l <= 15){
insertionSort(arr, l, r);//当待排序部分数量较少时,数组接近有序,此时使用插入排序效率高
return;
}
int mid = (l+r)/2;
__mergeSort(arr, l, mid);
__mergeSort(arr, mid+1, r);
if(arr[mid] > arr[mid+1]) //当mid小于等于mid+1位置上值时,mid两边是有序的
__merge(arr, l, mid, r, new MyComparator<>());
}