题目描述:
给出一个升序的整数数组 A 和升序的整数数组 B ,请将数组 B 合并到数组 A 中,变成一个升序的升序数组。
数据范围:0<=n,m<=100, |Ai|<=100, |Bi|<=100
注意:
保证 A 数组有足够的空间存放 B 数组的元素, A 和 B 中初始的元素数目分别为 m 和 n,A 的数组空间大小为 m+n
不要返回合并的数组,将数组 B 的数据合并到 A 里面即可
Input
两行数字,m, n,分别表示两个数组的大小。接下来m行输入第一个数组A的元素,然后n行输入第二个数组B的元素。
Output
输出m+n行数字,每一行为合并后数组A的元素
思路:
将数组长度开辟足够长,之后将数组B中的元素插入到数组A后
从A的第一个元素开始,每次循环与该元素后的所有元素比较
一旦该元素小于等于某个元素,即跳出该轮循环
否则,交换两个元素,最终实现有序数组的就地合并
代码实现:
void merge(int A[], int m, int B[], int n){
int temp,j=0;
for(int i=m;i<m+n;i++){
A[i]=B[j];
j++;
}
for(int i=0;i<n+m;i++){
for(j=i;j<m+n;j++){
if(A[i]<=A[j])continue;//避免多余操作
else{//A[i]>A[j]
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
}