📅  最后修改于: 2023-12-03 15:01:34.460000             🧑  作者: Mango
合并排序(Merge Sort)是一种经典的排序算法,它采用分治策略(Divide and Conquer)将一个大区间划分成两个小区间递归排序,再将排好序的小区间合并成一个有序的大区间,最终完成排序。
合并排序算法的步骤如下:
以下为 Java 实现合并排序算法的示例代码:
public class MergeSort {
public static void mergeSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
sortProcess(arr, 0, arr.length - 1);
}
public static void sortProcess(int[] arr, int left, int right) {
if (left == right) {
return;
}
int mid = left + ((right - left) >> 1);
sortProcess(arr, left, mid);
sortProcess(arr, mid + 1, right);
merge(arr, left, mid, right);
}
public static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = 0;
int p1 = left;
int p2 = mid + 1;
while (p1 <= mid && p2 <= right) {
temp[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
while (p1 <= mid) {
temp[i++] = arr[p1++];
}
while (p2 <= right) {
temp[i++] = arr[p2++];
}
for (i = 0; i < temp.length; i++) {
arr[left + i] = temp[i];
}
}
}
合并排序算法的时间复杂度为 O(nlogn),其中 n 为数组的长度。虽然它的时间复杂度和快速排序算法相同,但是它的稳定性更好,在某些场景下更加适用。