题目描述
有两个排序的数组 A1 和 A2,内存在 A1 的末尾有足够多的空余空间容纳 A2。请实现一个函数,把 A2 中的所有数字插入 A1 中,并且所有的数字是排序的
算法分析
在合并两个数组或者字符串时,如果从前往后复制每个数字或字符则需要重复移动数字或字符多次,故可以考虑从后往前复制,减少移动的次数。
具体来说:首先要确定合并后数组 Array 的大小,之后从 Array 最后一位开始,依次确定每一位存放的元素,直到将所有元素存放完成。
程序代码
#include<iostream>
using std::cout;
using std::endl;
void PrintArr(int arr[], int n)
{
for(int i=0; i<n; i++)
cout << arr[i] << " ";
cout << endl;
}
void main()
{
int arr1[20] = {1,3,5,7,9};
int arr2[5] = {2,4,6,8,10};
const int length1 = 5;
const int length2 = 5;
const int length = length1 + length2;
int p1 = length1 - 1;
int p2 = length2 - 1;
int p = length-1;
while(p1>=0 && p2>=0)
{
if(arr1[p1] >= arr2[p2])
{
arr1[p] = arr1[p1];
p1--;
}
else
{
arr1[p] = arr2[p2];
p2--;
}
p--;
}
PrintArr(arr1,20);
system("pause");
return;
}