Merge Sort

2019-04-01  本文已影响0人  綿綿_
public class MergeSort {
    static final int SIZE=15;
    static void mergeOne(int a[],int b[],int n, int len)
    {
        int i,j,k,s,e;
        s=0;
        
        while(s+len<n)
        {
            e=s+2*len-1;
            if(e>=n)
            {
                e=n-1;
            }
            k=s;
            i=s;
            j=s+len;
            while(i<s+len && j<=e)
            {
                if(a[i]<=a[j])
                {
                    b[k++]=a[i++];
                }
                else {
                    b[k++]=a[j++];
                }
            }
            while(i<s+len)
            {
                b[k++]=a[i++];
            }
            while(j<=e)
            {
                b[k++]=a[j++];
            }
            s=e+1;
        }
        if(s<n)
        {
            for(;s<n;s++)
            {
                b[s]=a[s];
            }
        }
    }
static void mergeSort(int a[],int n)
    {
        int h,len,f;
        
        len=1;
        f=0;
        
        int[] p=new int [n];
        while(len<n)
        {
            if(f==1)
            {
                mergeOne(p,a,n,len);
            }
            else
            {
                mergeOne(a,p,n,len);
            }
            len=len*2;
            f=1-f;
        }
            if(f==1)
            {
                for(h=0;h<n;h++)
                {
                    a[h]=p[h];
                }
            }
    }
}
上一篇下一篇

猜你喜欢

热点阅读