合并有序数组
方法1-递归
//运用的思想就是比较谁大,谁就先被排进数组
public static void merge(int []a1,int i,int iEnd,int j,int jEnd,
int []a2,int k){
//定义了一个a1数组,分了i,iEnd边界和j.jEnd边界,实际上是分成两个数组进行判断,比较判断哪个先进a2数组
if(i>iEnd){//如果超出进行数组迁移
System.arraycopy(a1,j,a2,k,jEnd-j+1);
//原数组,开始迁移的位置,新数组,迁移到的位置,迁移的长度
return;
}
if(j>jEnd){
System.arraycopy(a1,i,a2,k,iEnd-i+1);
return;
}
//优先写这一步
//如果a1[i]小,就放a[i]
if(a1[i]<a1[j]){
a2[k]=a1[i];
//开始递归
merge(a1,i+1,iEnd,j,jEnd,a2,k+1);
}
if(a1[i]>a1[j]){
a2[k]=a1[j];
merge(a1,i,iEnd,j+1,jEnd,a2,k+1);
}
}
非递归方法
public static void merge1(int []a1,int i,int iEnd,int j,int jEnd,int []a2){
int k=0;//内置k
while (i<=iEnd&&j<=jEnd){//都没到边界
if(a1[i]<a1[j]){
a2[k]=a1[i];
i++;//递增
}else {
a2[k]=a1[j];
j++;
}
k++;
}
if(i>iEnd){//一旦i结束,复制数组j
System.arraycopy(a1,j,a2,k,jEnd-j+1);
}
if(j>jEnd){
System.arraycopy(a1,i,a2,k,iEnd-i+1);
}
}
标签:数组,int,合并,a1,a2,有序,iEnd,jEnd
From: https://www.cnblogs.com/cgy-chen/p/17566735.html