1.有两个有序数组A,B。其中数组A的长度足以放下A和B 的所有元素,现在要求将A和B数组合并到A中,合并后仍要求A是一个有序数组,给出你的算法。
/**
*
* @param a
* ,a数组的长度足够长,足够放下a和b的所有元素
* @param b
* @param size为数组a的有效元素个数
* <p>
* Description:
* </p>
*/
public void arrayMerge(int a[], int b[], int size) {
int storeIndex = size + b.length - 1;
int i = size - 1;
int j = b.length - 1;
while (i >= 0 && j >= 0) {
if (a[i] >= b[j]) {
a[storeIndex] = a[i];// 大的元素直接放到最终位置
i--;
storeIndex--;
} else if (a[i] < b[j]) {
a[storeIndex] = b[j];// 将b中的元素插入到最终位置
j--;
storeIndex--;
}
}
while (j >= 0) {
a[storeIndex--] = b[j--];
}
}
public static void main(String[] args) {
Sort s = new Sort();
int a1[] = new int[8];
a1[0] = 3;
a1[1] = 8;
a1[2] = 10;
// int a2[] = { 1, 2, 4, 7 };
int a2[] = { 7, 12 };
s.arrayMerge(a1, a2, 3);
System.out.println("after:" + Arrays.toString(a1));
}