📅  最后修改于: 2023-12-03 15:02:05.815000             🧑  作者: Mango
合并排序(Merge Sort)是一种常用的排序算法,其原理是将待排序的数组(或链表)划分为两个子序列,通过递归将子序列排序,最后将排好序的子序列合并成完整的有序序列。
在Java中,实现合并排序算法的代码如下:
public class MergeSort {
// 归并排序算法
public 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 void merge(int[] arr, int left, int mid, int right) {
int[] tmp = new int[arr.length];
int p1 = left;
int p2 = mid + 1;
int k = left;
while (p1 <= mid && p2 <= right) {
if (arr[p1] <= arr[p2]) {
tmp[k++] = arr[p1++];
} else {
tmp[k++] = arr[p2++];
}
}
while (p1 <= mid) {
tmp[k++] = arr[p1++];
}
while (p2 <= right) {
tmp[k++] = arr[p2++];
}
for (int i = left; i <= right; i++) {
arr[i] = tmp[i];
}
}
// 测试
public static void main(String[] args) {
int[] arr = {3, 1, 9, 4, 5, 8, 2, 6, 7};
MergeSort mergeSort = new MergeSort();
mergeSort.mergeSort(arr, 0, arr.length - 1);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
上面的代码中,mergeSort()是归并排序算法的主体实现,merge()函数用于合并两个有序的子序列。在测试中,我们可以看到随机生成的数组通过归并排序后得到了正确的排序结果。
归并排序算法的时间复杂度为O(nlogn),相比于冒泡排序、插入排序等算法,它能够更快地进行排序操作。在Java中,除了手动实现外,我们也可以通过Collections.sort()方法使用归并排序算法进行排序。