题目:
两个排好序数组A、B。 A的末尾有充足内存容纳B。 实现函数,将B中所有数字插入到A中且是排序的
思路:
定义三个指针: pa1 指向插入数据前A的末尾元素 ; pa2指向插入数据后A的末尾元素;pb1指向B的末尾元素
若插入数据前A大小为len1, B大小为len2, 则pa2指向len1+len2-1的位置
从后往前插入
代码:
#include <iostream>
#include <vector>
using namespace std;
void Merge(vector<int> &veca, vector<int> &vecb)
{
int beforeChangeLen = veca.size();
int changeLen = beforeChangeLen + vecb.size();
veca.resize(changeLen);
int pa1 = beforeChangeLen - 1;
int pa2 = changeLen - 1;
int pb1 = vecb.size() - 1;
while (pa1 >= 0)
{
if (0 > pb1)
{
break;
}else if (0 > pa1)
{
veca[pa2--] = vecb[pb1--];
}else
{
if (veca[pa1] > vecb[pb1])
{
veca[pa2--] = veca[pa1--];
}else
{
veca[pa2--] = vecb[pb1--];
}
}
}
}
int main()
{
int a[] = {1, 3, 12, 34, 45, 67, 78, 88, 90};
int b[] = {2, 4, 5, 7, 34, 56, 68, 77, 89, 120};
vector<int> veca(a, a+9);
vector<int> vecb(b, b+10);
Merge(veca, vecb);
for (int i = 0; i < veca.size(); ++i)
{
cout << veca[i] << " ";
}
system("pause");
}