题目
将两个升序顺序表合并为一个新的有序顺序表,并返回得到的顺序表。
实现代码
#include <iostream>
#include <vector>
vector<int> mergeSort(vector<int>& a, vector<int>& b){
vector<int> c;
int i=0, j=0;
// 每次选择两个数组中较小的元素放入新数组
while(i<a.size() && j<b.size()){
if(a[i]<b[j]){
c.push_back(a[i]);
i++;
}else{
c.push_back(b[j]);
j++;
}
}
// 如果数组a还有未扫描到的元素, 处理末尾元素
while(i<a.size()){
c.push_back(a[i]);
i++;
}
// 处理数组b末尾元素
while(j<b.size()){
c.push_back(b[j]);
j++;
}
return c;
}
分析
算法中用到了<vector>
头文件中的push_back
元素,此函数会将传入参数添加到数组c的末尾,数组c的数组大小也会随之变大,也因此数组c初始化时可以不必指定大小(vector无参数初始化时默认大小为0)。
两个有序顺序表的合并操作即二路归并。算法思路并不复杂,但需要注意对两数组的合并要进行地彻底完整,不要忽视较长数组末尾部分的元素。
此外,二路归并也是实现归并排序所需要的一部分,是一个经典实用的操作。