package NC;
/**
* NC22 合并两个有序的数组
*
* 给出一个整数数组 A 和有序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个有序的升序数组
*
* 数据范围: ,,
*
* 注意:
* 1.保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
* 2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了
* 3. A 数组在[0,m-1]的范围也是有序的
*
* @author Tang
* @date 2021/9/29
*/
public class Merge {
/**
* 用空间换时间
*
*
* @param A
* @param m
* @param B
* @param n
*/
public void merge(int A[], int m, int B[], int n) {
int[] temp = new int[m];
for(int i = 0; i < temp.length; i++) {
temp[i] = A[i];
}
int indexB = 0;
int indexA = 0;
int index = 0;
while(index < A.length) {
if(indexB >= n) {
for(int i = indexA; i < m; i++) {
A[index] = temp[indexA];
index++;
indexA++;
}
break;
}
while(indexA < m && temp[indexA] <= B[indexB]) {
A[index] = temp[indexA];
index ++;
indexA++;
}
if(indexA >= m) {
for(int i = indexB; i < n; i++) {
A[index] = B[indexB];
index++;
indexB++;
}
break;
}
while(indexB < n && temp[indexA] >= B[indexB]) {
A[index] = B[indexB];
index++;
indexB++;
}
}
}
public static void main(String[] args) {
int A[] = {1,2,2,0,0,0};
int B[] = {3,5,6};
new Merge().merge(A,3,B,3);
}
}