java归并排序

设计思想是分治,具体实现思路,百度百科上有(上面的java代码很赞)


    public static void main(String[] args) {
        int[] arr = {1,20,2,19,3,18,4,5,17,6,7,16,8,9};
        int[] result = sort(arr, 0, arr.length - 1);
        List list = Lists.newArrayList();
        for (int i : result) {
            list.add(i);
        }
        System.out.println(list.stream().map(x -> String.valueOf(x)).collect(joining(",")));
    }

    /**
     * Sorts array.
     */
    @NonNull
    public static int[] sort(@NonNull int[] arr, int l, int h) {

        if (l == h) {
            return new int[] {arr[l]};
        }
        int mid = (l + h) / 2;
        int[] left = sort(arr, l, mid);
        int[] right = sort(arr, mid + 1, h);
        int[] tempArr = new int[left.length + right.length];

        int m = 0, i = 0, j = 0;
        while (i < left.length && j < right.length) {
            tempArr[m++] = left[i] > right[j] ? right[j++] : left[i++];
        }
        while (i < left.length) {
            tempArr[m++] = left[i++];
        }
        while (j < right.length) {
            tempArr[m++] = right[j++];
        }
        return tempArr;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。