两个有序数组合并
作者:互联网
题目描述
给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组
注意:
可以假设A数组有足够的空间存放B数组的元素,A和B中初始的元素数目分别为m和n
题目分析
1.这里面我们需要用到双指针遍历,两个指针分别从A和B的尾部遍历
2.最开始比较A和B的m,n这个尾部的值,把较大的值赋值给A整体整数数组的尾部,然后指针左移
3.其中到最后,可能有一个先结束,假如B先遍历完,这个时候我们不用管;假如B后遍历完,这个时候我们需要把B数组移到A的最前面
代码如下
public void merge(int A[], int m, int B[], int n) {
int curA = m - 1; //定义一个指针在A末尾
int curB = n - 1; //定义一个指针在B末尾
int index = m + n - 1; //定义一个在合并后的A数组的末尾
//遍历的条件,二者指针必须都在上面
while(curA>=0&&curB>=0){
//必须满足A此时的值,大于B,我们才把A的值移动到末尾
if(A[curA]>B[curB]){
A[index--] = A[curA--];
//A的值要是小于等于B,我们就把B的值移动到末尾
}else{
A[index--] = B[curB--];
}
}
//此时B没有遍历完,我们把它剩余的移动到合并的下面
//这里不用再写A为遍历完的情况,多此一举,本来就是合并到A中
while(curB >= 0){
A[index--] = B[curB--];
}
}
标签:遍历,数组,int,合并,--,curB,有序,指针 来源: https://www.cnblogs.com/fzstudy/p/14664119.html