分治法之归并排序

已知n个元素的数组将数组排序后输出

@ApiOperation(value="归并", notes="分治法-归并排序")
    @GetMapping(value = "/guibingSort")
    public int[] guibingsort() {
        // 归并排序
        // 问题 已知一个n个元素数值数组 排序后输出
        int[] s1 = {8,5,6,4,7,1,3,2};
        int[] s2 = new int[8];
        mergeSort(0,s1.length-1,s1,s2);
        return s1;
    }

    /**
     * 分
     * @param a
     * @param b
     */
    public void mergeSort(int a,int b,int[]s1,int[] s2){
        if (a>=b) return ;
        int mid = (a+b)/2;
        mergeSort(a,mid,s1,s2);
        mergeSort(mid+1,b,s1,s2);
        merge(a,mid,b,s1,s2);

    }

    /**
     * 合
     * @param low
     * @param mid
     * @param hight
     */
    public void merge(int low,int mid,int hight,int[] s1,int[] s2){
        int i= low, j=mid+1,k=low;
        // 比较两边将较小的先给s2
        while (i <=mid && j<=hight){
            if (s1[i]<s1[j]){
                s2[k++] = s1[i++];
            }else {
                s2[k++]=s1[j++];
            }
        }
        // 当其中一方走到头后 将另一方依序安排到s2后面
        while (i<=mid){
            s2[k++]=s1[i++];
        }
        while (j<=hight){
            s2[k++]=s1[j++];
        }
//        将s2 从low到hight 复制给s1
        for (int l = low; l <= hight; l++) {
            s1[l]=s2[l];
        }
    }

复杂度 O(nlogn)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容