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

「MergeSort」使用归并排序算法进行数组排序的Java函数

发布时间:2023-06-08 19:51:29

归并排序(Merge Sort)是一种分治算法,它将待排序的数组分成两部分,对子数组进行排序,然后将排好序的子数组合并成一个有序的数组。它的时间复杂度为 O(nlogn),稳定且适用于链式存储结构。

下面是一个使用归并排序算法进行数组排序的Java函数:

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);
    }
}

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

该函数接受一个整型数组以及数组的左、右下标,然后对数组进行排序。

排序过程分为三个步骤:

1. 分治:将待排序的数组分成两个子数组,然后对子数组进行排序。递归地进行这个过程,直到子数组的长度为1。

2. 归并:将两个已经有序的子数组合并成一个有序的数组。这个过程使用一个辅助数组,依次比较两个子数组的首元素,将较小的元素放入辅助数组。

3. 合并:将辅助数组中排序好的元素按顺序放回原数组中。

归并排序的时间复杂度为 O(nlogn),空间复杂度为 O(n),稳定性好。由于归并排序是一种递归算法,在递归调用时需要较多的栈空间,因此在排序大数组时,需要进行优化,使之不会导致栈溢出的情况发生。

总之,归并排序是一种基于分治思想的高效排序算法,可广泛应用于任何需要排序的场景,特别是大规模数据的排序。