import java.util.Arrays;

/**
 * @author leekari
 * @date 2020/10/14 15:42
 * @description
 */

/**
 * 归并排序
 */
public class MergeSort {
    public static int[] mergeSort(int l, int r, int[] arr){
        if (l == r) {
            return new int[]{arr[l]};
        }
        int mid = l + (r - l) / 2;
        int[] leftArr = mergeSort(l, mid, arr);
        int[] rightArr = mergeSort(mid + 1, r, arr);
        int[] newArr = new int[leftArr.length + rightArr.length];

        int i = 0, j = 0, k = 0;
        while (i < leftArr.length && j < rightArr.length) {
            newArr[k++] = leftArr[i] < rightArr[j] ? leftArr[i++] : rightArr[j++];
        }
        while (i < leftArr.length){
            newArr[k++] = leftArr[i++];
        }
        while (j < rightArr.length){
            newArr[k++] = rightArr[j++];
        }
        System.err.println(Arrays.toString(newArr));
        return newArr;
    }

    public static void main(String[] args) {
        int[] i = {3,2,5,1,6,8,9};
        System.err.println(Arrays.toString(mergeSort(0, i.length - 1, i)));
    }
}