题目描述:
给出一个整数数组
和有序的整数数组
,请将数组
合并到数组
中,变成一个有序的升序数组
注意:
1.可以假设
数组有足够的空间存放
数组的元素,
和
中初始的元素数目分别为
和
,
的数组空间大小为
+
注意:
1.可以假设
2.不要返回合并的数组,返回是空的,将数组
的数据合并到
里面就好了
3.
数组在[0,m-1]的范围也是有序的
解法一:暴力法(不推荐)
将B中所有元素直接插入A的尾部,再用选择排序将A中元素从小到大进行排序
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
for(int i=0;i<n;i++)
A[m+i]=B[i];
for(int i=0;i<m+n-1;i++)
for(int j=i+1;j<m+n;j++)
if(A[i]>A[j])
{
int temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}; 解法二:倒序插入法 从A与B的尾部开始逐个比较,较大者插入A的尾部,较小者留下继续进行比较,保证所有数据均被插入
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int temp=m+n-1;
m--;
n--;
while(m>=0&&n>=0)
{
if(A[m]>B[n]) A[temp--]=A[m--];
else A[temp--]=B[n--];
}
while(n>=0) A[temp--]=B[n--];
}
}; 
京公网安备 11010502036488号