合并排序算法Java

合并排序(Merge Sort)是一种经典的分治算法,其基本思想是将待排序的序列分成两部分,对每一部分递归地进行排序,然后再将排序好的部分合并起来。该算法的时间复杂度为O(nlogn),是一种高效稳定的排序算法。

算法原理

合并排序的算法原理非常简单,主要包括以下几个步骤:

  1. 将待排序的序列不断二分,直到每个子序列只有一个元素为止。
  2. 对相邻的两个子序列进行合并,合并的过程中进行排序,直到整个序列有序为止。

代码实现

下面是合并排序算法的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);
        }
    }

    public void merge(int[] arr, int left, int mid, int right) {
        int[] temp = new int[arr.length];
        int i = left;
        int j = mid + 1;
        int k = left;

        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 index = left; index <= right; index++) {
            arr[index] = temp[index];
        }
    }

    public static void main(String[] args) {
        int[] arr = {12, 11, 13, 5, 6, 7};
        MergeSort mergeSort = new MergeSort();
        mergeSort.mergeSort(arr, 0, arr.length - 1);

        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

类图

下面是合并排序算法的类图:

classDiagram
    MergeSort <|-- MergeSort

甘特图

下面是合并排序算法的甘特图:

gantt
    title 合并排序算法甘特图
    section 排序
    MergeSort算法实现: active, 2022-10-20, 3d

总结

通过本文的介绍,我们了解了合并排序算法的基本原理和Java实现方法。合并排序是一种高效稳定的排序算法,适用于各种规模的数据集。希望本文对您理解和掌握合并排序算法有所帮助。如果您有任何疑问或建议,欢迎留言讨论。