思想:
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。
算法复杂度为 O(nlogn) 级别
public class MergeSort {
public static void sort(int[] arr) {
sort(arr, 0, arr.length - 1);
}
private static void sort(int[] arr, int l, int r) {
// if(l>=r){
// return;
// }
//第一个优化:小数组时使用插入排序效率更高
if (r - l <= 15) {
InsertSort.sort(arr);
return;
}
int mid = (l + r) / 2;
sort(arr, l, mid);
sort(arr, mid + 1, r);
// merge(arr,l,mid,r);
//第二个优化:当arr[mid]<=arr[mid+1]时 ,没必要进行merge
if (arr[mid] > arr[mid + 1]) {
merge(arr, l, mid, r);
}
}
private static void merge(int[] arr, int l, int mid, int r) {
int[] aux = Arrays.copyOfRange(arr, l, r + 1);
int i = l;
int j = mid + 1;
for (int k = l; k <= r; k++) {
if (i > mid) {
arr[k] = aux[j - l];
j++;
} else if (j > r) {
arr[k] = aux[i - l];
i++;
} else if (aux[i - l] < aux[j - l]) {
arr[k] = aux[i - l];
i++;
} else {
arr[k] = aux[j - l];
j++;
}
}
}
}
本文深入解析归并排序(MERGE-SORT)的实现原理与优化策略,归并排序是一种高效的排序算法,采用分治策略,复杂度为O(nlogn),适用于大数据量的排序场景。文章详细介绍了归并排序的代码实现,并探讨了两个优化技巧:小数组时采用插入排序及避免不必要的合并操作。
1584

被折叠的 条评论
为什么被折叠?



