题目概述
给两个数组int类型,将他们合并进行排序。(可能数组一个过长一个过短)
解题思路
思路一:将较短的那条的数据向长的里面比较插入,注意无用的循环。(效果较2优)
思路二:将较短的追加在较长的后面,利用sort排序即可。
代码实现
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> mergeSortedArray(vector<int> &A, vector<int> &B) {
//声明两个vector做中转
vector<int> tem;
vector<int> base;
//通过数组的size判断出长短并选小的来插入长的里面
if(A.size() >= B.size()){
tem = B;
base =A;
}
else{
tem = A;
base = B;
}
/**
* 第一种排序方法:比较依次插入
*/
//表示当前循环中的数是否插入的的状态
bool flag = false;
for(int i = 0; i < tem.size(); i++){
flag = false;//重新赋值
for(int j = 0; j < base.size(); j++){
//在最后一个元素的前面符合的位置插入
if (tem[i] <= base[j]){
//insert()方法:迭代器移位的方法
base.insert(base.begin() + j, tem[i]);
flag = true;//改变状态值
break;//已插入直接跳出该循环,避免多余的浪费
}
}
//当状态值为false时,将元素追加的末尾
if (!flag){
base.push_back(tem[i]);
}
}
/**
* 第二种排序方法:调用存在的排序函数
*/
/*for (int i = 0; i < tem.size(); i++) {
base.push_back(tem[i]);
}
sort(base.begin(), base.end());*/
return base;
}
int main(){
vector<int> sc = {1,5};
vector<int> tem = {2,3};
tem = mergeSortedArray(sc,tem);
cout << "[";
for (int i = 0; i < tem.size(); i++){
cout << tem[i] << (i == tem.size() - 1 ? "" : ", ");
}
cout << "]";
return 0;
}
个人纪录
- sort(base.begin(), base.end()); 排序的用法:直接返回数组对应的迭代器
- base.insert(base.begin() + j, tem[i]); insert方法:可以通过位移迭代器的方法来使用