题目:给定两个排序数组A和B,将B数组排序到A数组里面,同时保证插入后还是有序的。
算法的思路是利用给定数组都是升序的特点,从指定两个指向数组末尾元素的指针开始,一直比较,将大的数据插入到新的数组末尾哪里。一直循环下去。知道所有数据插入完成。
private static void printInt(int[] arr) {
// TODO Auto-generated method stub
System.out.print("{"+arr[0]);
for (int i = 1; i < arr.length; i++) {
System.out.print(", "+arr[i]);
}
System.out.println("}");
}
public static int[] insertArray(int[] arrayOfA, int[] arrayOfB) {
if (arrayOfA == null || arrayOfB == null)
return null;
int[] temp = arrayOfA;
//数组A的下标
int indexofA = arrayOfA.length - 1;
//数组B的下标
int indexofB = arrayOfB.length - 1;
//新数组的下标
int indexofNew = arrayOfA.length + arrayOfB.length-1;
//新数组的长度
arrayOfA = new int[arrayOfA.length + arrayOfB.length];
while (indexofNew >= 0) {
if (indexofA >= 0 && indexofB >= 0) {//当A B数组都还有元素时候比较元素大小,根据比较结果插入数值
if (temp[indexofA]>arrayOfB[indexofB]) {
arrayOfA[indexofNew--]=temp[indexofA--];
}else {
arrayOfA[indexofNew--]=arrayOfB[indexofB--];
}
}else if (indexofA<0 && indexofB>=0) {//如果有一方数组插入完成,那么剩下一方只要插入就够了
arrayOfA[indexofNew--]=arrayOfB[indexofB--];
}else if (indexofA>=0&& indexofB<0) {
arrayOfA[indexofNew--]=temp[indexofA--];
}
}
return arrayOfA;
}
测试数据
int[] arra=new int[]{1,3,7,9,12,45,47,98,900};
int[] arrb=new int[]{-34,3,12,24,30,31,35,36,77,687,901};
printInt(arra);
printInt(arrb);
printInt(insertArray(arra, arrb));