题目
有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字是排序的。
思路
从尾到头比较A1和A2中的数字。并把较大的数字复制到A1中的合适位置
C++实现
//剑指offer.面试题5.替换空格.课后相关题目-合并两个有序数组
//题目:有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。
//请实现一个函数,把A2中的所有数字插入A1中,并且所有的数字是排序的。
//思想:从尾到头比较A1和A2中的数字。并把较大的数字复制到A1中的合适位置
#include<iostream>
class Solution
{
public:
void merge_twoarray(int arrayA1[], int arrayA2[], int lengthA1, int lengthA2)
{
int totallength = lengthA1 + lengthA2 - 1;//先算出两数组合并后长度
lengthA1--;
lengthA2--;
while (lengthA1 >= 0 && lengthA2 >= 0)//先保证合并完一个数组
{
if (arrayA1[lengthA1] >= arrayA2[lengthA2])
{
arrayA1[totallength] = arrayA1[lengthA1];
lengthA1--;
}
else
{
arrayA1[totallength] = arrayA2[lengthA2];
lengthA2--;
}
totallength--;
}
//再合并余下的
while (lengthA1 >= 0)
{
arrayA1[totallength] = arrayA1[lengthA1];
lengthA1--;
totallength--;
}
while (lengthA2 >= 0)
{
arrayA1[totallength] = arrayA2[lengthA2];
lengthA2--;
totallength--;
}
}
};
int main()
{
int A1[20] = { 1,3,5,7,9 };
int A2[] = { 1,2,6,8,10,13,15 };
int lengthA1 = 5;// sizeof(A1) / sizeof(int);
int lengthA2 = sizeof(A2) / sizeof(int);
Solution solution; //实例化类
solution.merge_twoarray(A1, A2, lengthA1, lengthA2);
for (int i = 0; i < (lengthA1 + lengthA2); i++)
{
std::cout << A1[i] << " ";
}
std::cout << std::endl;
return 0;
}