Java基础练习5
题目描述:合并两个有序数组
例如:输入:Array1={1,3,5,7,9},Array2={2,4,6,8,10,12};
输出结果:1,3,4,5,6,7,8,9,10,12
代码实现
public class Demo05 {
public static void main(String[] args) {
int[] Array1= {1,3,5,7,9};
int[] Array2= {2,4,6,8,10,12};
int[] result=megerArray(Array1,Array2);
System.out.println(Arrays.toString(result));
}
public static int[] megerArray(int[] Array1,int[] Array2) {
//方式1:将两个数组复制到一个新数组中,再进行排序
//定义新数组result
int[] result=new int[Array1.length+Array2.length];
//将Array1从下标为0开始复制到新数组result下标从0开始,共复制Array1.length个元素即Array1全部元素
System.arraycopy(Array1, 0, result, 0, Array1.length);
//将Array2下标为0开始复制到新数组result下标从Array1.length开始即复制完Array1紧接着复制Array2,共复制Array2.length个元素即Array2全部元素
System.arraycopy(Array2, 0, result, Array1.length, Array2.length);
//对新组进行排序
Arrays.sort(result);
return result;
//方式2:采用双下标,按照最小长度合并两个有序数组,再复制剩余数组
int[] result=new int[Array1.length+Array2.length];
int p1=0,p2=0,i=0;
while(p1<Array1.length&&p2<Array2.length) {
if(Array1[p1]<Array2[p2]) {
result[i++]=Array1[p1++];
}else {
result[i++]=Array2[p2++];
}
}
if(p1<Array1.length) {
System.arraycopy(Array1, p1, result,i , Array1.length-p1);
}else {
System.arraycopy(Array2, p2, result, i, Array2.length-p2);
}
return result;
}
}
输出结果: