A与B两个数组均是有序的,只需将B数组插入到A数组中便能解决这个问题
比较posA指向元素和posB指向元素的大小;
import java.util.*;
public class Solution {
public void merge(int A[], int m, int B[], int n) {
//先将B数组连接到A的后边
for (int i = 0; i < n; i++) {
A[m + i] = B[i];
}
//定义两个指针;初始第一个指针posA指向A中第一个元素的位置,第二个指针posB指向B中第一个元素的位置,
int posB = m;
int posA = 0;
//移动指针,找到A中第一个比B中元素大的位置,将B中的元素插入当前位置即可;
//当遍历完B中所有元素或者A中元素都比B中元素小时退出循环
while (posB < m + n && posA<posB) {
//移动指针,找到A中第一个比B中元素大的位置,将B中的元素插入当前位置即可
if ( A[posA]> A[posB] ) {
int temp = A[posB];
//先将之后的所有元素后移,再将元素插入到A中
for (int i = posB; i > posA; i--) {
A[i] = A[i - 1];
}
A[posA] = temp;
//接着遍历B中剩余的元素
posB++;
}
//由于A B均是有序的,遍历完之后只需与后边一个元素比较即可
posA++;
}
}
}