递归实现自顶向下的二路归并排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28352347/article/details/53391349

package Sort;

/**
* 二路归并算法的核心,将两个数组合并成一个
* Created by Administrator on 2016/11/28.
*/
public class Merge {
static int TR2[]=new int [100];

public static void merge(int []a,int[]b,int i,int j,int n)
{
    //a为待排序数组,左边为i-j,右边为j+1-n
    //数组b为新排好序列的数组,做仓库作用


        int k=i,m=j+1;
        for(;i<=j&&m<=n;k++){

            if(a[i]<a[m]){
                b[k]=a[i++];
            }
            else {
                b[k] = a[m++];
            }
        }

        if(i<=j){
            for(;i<=j;i++){
                b[k++]=a[i];
            }
            if(m<=n){
                for(;m<=n;m++){
                    b[k++]=a[m];
                }
            }

        }

    }

    public static void MergeSort(int []SR,int []TR1,int s,int t)
    {

        int m;
        //若首尾相同,则将这个元素放入TR1中
        if(s==t)
            TR1[s]=SR[s];
        else
        {
            m=(s+t)/2;
            MergeSort(SR,TR2,s,m);
            MergeSort(SR,TR2,m+1,t);
            merge(TR2,TR1,s,m,t);//将TR2中的两部分进行归并,存储在TR1中
        }

    }

public static void main(String [] args) {
    int []a={1,5,4,3,9,45,64,32,31,12,33};
    int []b=new int[11];


    MergeSort(a,b,0,a.length-1);
    for (int c:b
         ) {
        System.out.println(c);

    }
}
}

被工作室的学弟问到归并排序,因为大多是用C++写的,这里用JAVA实现,代码和测试用例已经贴出来了,大家可以试一下

猜你喜欢

转载自blog.csdn.net/qq_28352347/article/details/53391349
今日推荐