📜  用于合并排序的Java程序(1)

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

Java合并排序程序介绍

合并排序是一种基于分治策略的排序算法,也是比较高效的排序算法之一。它将一个待排序数组分成两个较小的子数组,然后对这两个子数组进行排序,最后将两个有序子数组合并成一个有序数组。

下面我们来介绍一个用Java实现的合并排序算法程序。

public class MergeSort {
    public static void sort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        int[] aux = new int[arr.length];
        sort(arr, aux, 0, arr.length - 1);
    }
    
    private static void sort(int[] arr, int[] aux, int lo, int hi) {
        if (lo >= hi) {
            return;
        }
        int mid = lo + (hi - lo) / 2;
        sort(arr, aux, lo, mid);
        sort(arr, aux, mid + 1, hi);
        merge(arr, aux, lo, mid, hi);
    }
    
    private static void merge(int[] arr, int[] aux, int lo, int mid, int hi) {
        for (int i = lo; i <= hi; i++) {
            aux[i] = arr[i];
        }
        int i = lo, j = mid + 1;
        for (int k = lo; k <= hi; k++) {
            if (i > mid) {
                arr[k] = aux[j++];
            } else if (j > hi) {
                arr[k] = aux[i++];
            } else if (aux[j] < aux[i]) {
                arr[k] = aux[j++];
            } else {
                arr[k] = aux[i++];
            }
        }
    }
}

上述程序定义了一个名为MergeSort的类,其中包含了一个名为sort的公共静态方法。该方法用于对指定的整型数组进行排序。

首先,程序会对输入数组进行判断,如果数组为空或长度为1,则直接返回。接着,程序会创建一个辅助数组aux,用于在排序过程中存储中间结果。然后调用私有方法sort,对整个数组进行排序。

在私有方法sort中,程序首先判断lo是否大于等于hi,如果是则返回。然后计算中间位置mid,将数组分为两部分。接着递归调用sort方法,对左半部分和右半部分分别进行排序,并将结果合并到aux数组中。最后调用merge方法,将aux数组中的数据合并回原始数组arr中。

在私有方法merge中,程序先将arr数组中需要排序的部分赋值到aux数组中。接着,定义三个指针ijk,分别指向左半部分的第一个元素,右半部分的第一个元素,和当前需要排序的位置。然后比较aux[j]aux[i]的大小关系,将较小的数值放入arr[k]中,并将指针向后移动。

最后,我们可以使用如下代码来测试上述程序:

public class Main {
    public static void main(String[] args) {
        int[] arr = { 5, 12, 8, 15, 10, 6, 1, 9 };
        MergeSort.sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

运行上述代码,程序会输出排序后的结果:

[1, 5, 6, 8, 9, 10, 12, 15]

总之,Java合并排序程序是一种高效的排序算法,可以有效地对一般规模的数据进行排序。使用上述程序,我们可以轻松地实现合并排序算法,并对大量数据进行排序。