欢迎访问宙启技术站
智能推送

Java函数实现合并排序算法

发布时间:2023-07-02 17:33:50

合并排序算法(Merge Sort)是一种基于分治策略的排序算法,通过将待排序序列划分为两个子序列,对每个子序列进行递归排序,最后再将两个有序子序列合并成一个有序序列。合并排序算法的时间复杂度为O(nlogn),具有稳定性和适用于大规模数据的特点。

下面是Java实现合并排序算法的函数:

public class MergeSort {

    public void mergeSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        int[] temp = new int[arr.length]; // 用于暂存合并的结果
        mergeSort(arr, 0, arr.length - 1, temp);
    }

    private void mergeSort(int[] arr, int start, int end, int[] temp) {
        if (start < end) {
            int mid = (start + end) / 2;
            mergeSort(arr, start, mid, temp); // 对左侧子序列进行递归排序
            mergeSort(arr, mid + 1, end, temp); // 对右侧子序列进行递归排序
            merge(arr, start, mid, end, temp); // 合并两个有序子序列
        }
    }

    private void merge(int[] arr, int start, int mid, int end, int[] temp) {
        int i = start; // 左侧子序列的指针
        int j = mid + 1; // 右侧子序列的指针
        int k = 0; // 合并结果的指针

        // 比较左右两个子序列中的元素,并将较小的放入合并结果数组中
        while (i <= mid && j <= end) {
            if (arr[i] <= arr[j]) {
                temp[k++] = arr[i++];
            } else {
                temp[k++] = arr[j++];
            }
        }

        // 将左侧子序列剩余的元素放入合并结果数组中
        while (i <= mid) {
            temp[k++] = arr[i++];
        }

        // 将右侧子序列剩余的元素放入合并结果数组中
        while (j <= end) {
            temp[k++] = arr[j++];
        }

        // 将合并结果复制回原数组
        for (i = 0; i < k; i++) {
            arr[start + i] = temp[i];
        }
    }

    public void printArray(int[] arr) {
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = {3, 1, 5, 4, 2};
        MergeSort mergeSort = new MergeSort();
        mergeSort.mergeSort(arr);
        mergeSort.printArray(arr);
    }
}

以上是一个简单的Java程序,实现了合并排序算法。其中,mergeSort函数用于调用递归的合并排序函数,mergeSort函数用于对传入的子序列进行递归排序;merge函数用于合并两个有序子序列;printArray函数用于打印排序结果。

main函数中,我们创建一个测试数组arr,并调用mergeSort函数对其进行排序,最后调用printArray函数打印排序结果。

通过以上代码,我们可以实现对任意数组的合并排序。