核心思想
归并排序的核心思想也是分治,分而治之,不同于快速排序的是,归并排序是先递归处理左右两部分数组,将左右两部分数组都排序号之后,再合并成新的有序数组。
代码
//归并排序
public static void Mergesort(int[] arr, int l, int r) {
if (l >= r) {
return;
}
int mid = (l + r) / 2;//确定分界点
Mergesort(arr, l, mid);//递归处理左边
Mergesort(arr, mid + 1, r);//递归处理右边
int k = 0, i = l, j = mid + 1;
int[] temp = new int[r - l + 1];
while (i <= mid && j <= r) {
if (arr[i] < arr[j]) {
temp[k++] = arr[i++];
} else temp[k++] = arr[j++];
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= r) {
temp[k++] = arr[j++];
}
for (i = l, j = 0; i <= r; i++, j++) {
arr[i] = temp[j];//将排序好的数组放回原数组
}
}