排序 - 歸併排序

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章