归并排序

public class MergeSort {

    private static void sort(int[] a, int i, int length, int[] b) {
        if (i < length) {
            int mid = (length + i) / 2;
            sort(a, i, mid, b);
            sort(a, mid + 1, length, b);
            merge(a, b, mid, i, length);
        }
    }

    private static void merge(int[] a, int[] b, int mid, int i, int length) {
        int t = 0;
        int o = i;
        int k = mid + 1;
        while (i <= mid && k <= length) {
            if (a[i] > a[k]) {
                b[t++] = a[k++];
            } else {
                b[t++] = a[i++];
            }
        }
        while (i <= mid) {
            b[t++] = a[i++];
        }

        while (k <= length) {
            b[t++] = a[k++];
        }

        t = 0;
        while (o <= length) {
            a[o++] = b[t++];
        }
    }

    public static void main(String[] args) {
        int a[] = { 3, 2, 1, 6, 8 };
        int b[] = new int[a.length];
        sort(a, 0, a.length - 1, b);
        System.out.println(Arrays.toString(a));
    }
}
原文地址:https://www.cnblogs.com/hansc-blog/p/9351878.html