合并排序(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);
}
}
以上就是合并排序的具体算法,如果两个序列的排序程度越高,则此算法的效率越高。