📜  合并排序 - Java (1)

📅  最后修改于: 2023-12-03 15:07:28.070000             🧑  作者: Mango

合并排序 - Java

简介

合并排序是一种经典的排序算法,也是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)。

稳定性:稳定。

总结

合并排序是一种经典的排序算法,其递归实现简单易懂。虽然时间复杂度与快速排序相近,但在某些特定情况下比快排的性能更稳定。