归并排序(Java)

public class Merge_Sort {
    public static void main(String[] args)
    {
        int[] A ={3,1,2,4,6,7,5,3};
        Merge_sort(A,0,7);
        for(int i=0;i<A.length;i++)
        {
            System.out.print(A[i]);
            System.out.print(' ');
        }
    }

    public static void Merge_sort(int[] A,int p,int r)
    {
        int q;
        if(p<r)
        {
            q = (p+r)/2;
            Merge_sort(A,p,q);
            Merge_sort(A,q+1,r);
            Merge(A,p,q,r);
        }
    }
    public static void Merge(int[] A,int p,int q,int r)
    {
        int n1 = q-p+1;
        int n2 = r-q;
        int L[]= new int[n1];
        int R[] = new int[n2];
        int i,j;
        for(i=0;i<n1;i++)
            L[i] = A[p+i];
        for(i=0;i<n2;i++)
            R[i] = A[q+i+1];
        //L[n1-1] = 999999;
        //R[n2-1] = 999999;
        i=0; j=0;
        for(int k=p;k<=r;k++)
        {

            if(i<L.length && j<R.length && L[i]<=R[j])
            {
                A[k] = L[i];
                i = i+1;
            }
            else if(i<L.length && j<R.length && L[i]>R[j])
            {
                A[k] = R[j];
                j = j+1;
            }
            else if(i>=L.length && j<R.length)
            {
                A[k] = R[j];
                j = j+1;
            }
            else if(i<L.length && j>=R.length)
            {
                A[k] = L[i];
                i = i+1;
            }
        }
    }
}
原文地址:https://www.cnblogs.com/dear_diary/p/6749506.html