您的位置:首页 > 编程语言 > Java开发

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

2016-08-24 22:45 369 查看
合并排序(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
;
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);
}
}


以上就是合并排序的具体算法,如果两个序列的排序程度越高,则此算法的效率越高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息