JAVA学习笔记(练习)
合并两个有序数组,合并后仍为有序数组
直接上代码:
package com.apesource.test;
import java.util.Arrays;
public class Test06 {
public static void main(String[] args) {
int[] array1 = {2,4,6,8,10,12};
int[] array2 = {1,3,5,7,9,11,13,15,19,23};
int[] result = megerArray(array1,array2);
System.out.println(Arrays.toString(result));
}
public static int[] megerArray(int[]array1,int[]array2) {
int[] resultarray = new int[array1.length+array2.length];
//方法一
System.arraycopy(array1, 0, resultarray, 0,array1.length );
System.arraycopy(array2, 0, resultarray, array1.length, array2.length);
Arrays.sort(resultarray);
//方法二
int p1 = 0,p2 = 0,i = 0;
while(p1<array1.length && p2<array2.length) {
if(array1[p1]<array2[p2]) {
resultarray[i++]=array1[p1++];
}else {
resultarray[i++]=array2[p2++];
}
}
//复制剩余元素
if(p1<array1.length) {
System.arraycopy(array1, p1, resultarray, i, array1.length-p1);;
}else {
System.arraycopy(array2, p2, resultarray, i, array2.length-p2);;
}
return resultarray;
}
}
方法一简单粗暴,新建一个数组,将原来两个数组复制进去,再使用Array.sort方法排序。
方法二使用循环遍历,将两个数组中每个元素进行比较,按顺序存入新数组中,再比较两个数组的长度,将较长的数组多余的元素存入新数组。该方法代码行数多,但不用两次复制数组。推荐初学者使用方法二,培养编程思维。