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

来源:互联网 发布:linux中怎么复制文件 编辑:程序博客网 时间:2024/06/12 00:33

合并排序(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);    }}

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

0 0