📅  最后修改于: 2023-12-03 15:07:28.070000             🧑  作者: Mango
合并排序是一种经典的排序算法,也是Java最常用的排序算法之一。它的思想是将待排序的数组不断地二分,直到每个子数组只有一个元素,然后逐层合并。
Java递归实现合并排序非常简单,代码可读性高,不易出错,同时也具有良好的时间复杂度和稳定性。
以下是Java递归实现合并排序的代码:
public class MergeSort {
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left;
int j = mid + 1;
int k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (int m = 0; m < temp.length; m++) {
arr[left + m] = temp[m];
}
}
}
注:以上代码假设待排序数组从下标left到下标right之间的所有数都需要排序。
该代码利用了递归的思想。首先将数组不断二分,直到只剩下一个元素,这个元素一定是有序的。然后从最小的最小子数组开始,将相邻的两个数组合并,同时保持有序性。最终合并成一个有序的数组。
为了实现合并操作,需要一个临时数组来存储结果,然后再将结果复制回原数组的相应位置。
时间复杂度:O(nlogn)。
稳定性:稳定。
合并排序是一种经典的排序算法,其递归实现简单易懂。虽然时间复杂度与快速排序相近,但在某些特定情况下比快排的性能更稳定。