排序 - 归并排序

import java.util.Objects;

/**
 * 空间复杂度:n
 * 最好时间复杂度:nlog2n
 * 最坏时间复杂度:nlog2n
 * 平均时间复杂度:nlog2n
 * 稳定性:稳定
 */
public class MergeSort {

    private static int[] merge(int[] array, int left, int right, int mid) {
        if (Objects.isNull(array) || array.length == 0) {
            return new int[0];
        }

        int size = right - left + 1;
        int[] result = new int[size];
        int index = 0;

        int i = left, j = mid + 1;

        while (i <= mid && j <= right) {
            if (array[i] <= array[j]) {
                result[index] = array[i ++];
            } else {
                result[index] = array[j ++];
            }
            ++ index;
        }

        while (i <= mid) {
            result[index ++] = array[i ++];
        }

        while (j <= right) {
            result[index ++] = array[j ++];
        }

        return result;
    }

    private static void sort(int[] array, int left, int right) {
        if (Objects.isNull(array) || array.length == 0) {
            return;
        }

        if (left < right) {
            int mid = (left + right) >>> 1;

            sort(array, left, mid);
            sort(array, mid + 1, right);

            int[] result = merge(array, left, right, mid);

            System.arraycopy(result, 0, array, left, result.length);
        }
    }

    public static void main(String[] args) {
        int[] array = {9, 2, 3, 6, 4, 8, 5, 0, 7, 1};
        sort(array, 0, array.length - 1);
        for (int i = 0;i < array.length; ++ i) {
            System.out.println(array[i]);
        }
    }
}


猜你喜欢

转载自blog.51cto.com/tianyiya/2285566