归并排序

Posted stAr_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序相关的知识,希望对你有一定的参考价值。

地将数组不断分为两个子数组,然后对子数组排序后进行合

/*
    思路就是将两个有序数组进行组合,通过递归得到左右排序好的数组
     */
    //组合函数
    public void combine(int[] a,int sta,int mid,int end,int[] res)
    {
        int f = sta;
        int sta2 = mid+1;
        int i = 0;
        //两个数组都没有遍历完
        while (sta<=mid&&sta2<=end)
        {
            if (a[sta]<a[sta2]) res[i++] = a[sta++];
            else res[i++] = a[sta2++];
        }
        while (sta<=mid) res[i++] = a[sta++];
        while (sta2<=end) res[i++] = a[sta2++];
        //将排序结果添加到a中,让a形成有序数组
        for (int j = 0; j < i; j++) {
            a[j+f] = res[j];
        }
    }
    public void sort(int[] a ,int sta,int end,int[] res)
    {
        //分治思想把子数组排为有序数组
        if (sta<end)
        {
            int mid = (sta+end)/2;
            sort(a,sta,mid,res);
            sort(a,mid+1,end,res);
            combine(a,sta,mid,end,res);
        }
    }
    public void mergeSort(int[] a)
    {
        int[] res = new int[a.length];
        sort(a,0,a.length-1,res);
    }

 

以上是关于归并排序的主要内容,如果未能解决你的问题,请参考以下文章

python代码实现归并排序(Merge Sort )

排序之外部排序

Python代码实现归并排序

Python代码实现归并排序

算法排序02——归并排序介绍及其在分治算法思想上与快排的区别(含归并代码)

排序算法之归并排序