java算法(一)——排序算法(下)之 合并排序

合并排序(MergeSort)算法就是将多个有序数据表合并成一个有序数据表的过程,如果只有两个有序数列则成为二路合并。
以下是合并排序的具体算法:

import sun.net.www.content.text.plain;
import com.sun.accessibility.internal.resources.accessibility;

public class MergeSort {

    public 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];
            }
        }
    }

    public static void mergeSortall(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);
            }
            if(f==0){
                mergeOne(a, p, n, len);
            }
            len=len*2;
            f=1-f;
        }
        if(f==1){
            System.out.print("**");
            for(int i=0;i<n;i++){
                a[i]=p[i];
                System.out.print(" "+a[i]);
            }
        }
        if(f==0){
            System.out.print("++");
            for(int i=0;i<n;i++){

                System.out.print(" "+a[i]);
            }
        }
    }

    public static void main(String[] argv){
        int[] a={1,8,6,7,5,12,45,766,0,87};
        mergeSortall(a, a.length);
    }
}

以上就是合并排序的具体算法,如果两个序列的排序程度越高,则此算法的效率越高。

猜你喜欢

转载自blog.csdn.net/h9f3d3/article/details/52304795