1、merge 合并算法
1.1 需提供两个待合并容器与一个目标容器
1.2 待合并容器必须有序 且排序规则相同
1.3 目标容器需提前指定容量
1.4 合并后容器依然有序 与待合并容器排序规则相同
2、sort
1.1 只提供排序区间默认从小到大排序
1.2 若需其他排序规则需自定义回调函数或函数对象
1.3 可采用内建函数对象
3、random_shuffle 洗牌算法
3.1 只需提供应用区间
3.2 对区间中的数进行随机调整
3.3 若需每次运行结果不同 改变随机种子
4、reverse 反转算法
4.1 将所提供的区间进行反转 并不是进行排序
4.2 从后往前排
5、测试程序
#include"pch.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>
#include<ctime>
using namespace std;
//merge将两个容器合并为一个
//待合并容器必须有序 且排序规则相同
//目标容器按照合并前容器的排序规则排序
//目标容器必须提前分配容量
void test01()
{
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
v2.push_back(i+1);
}
//目标容器
vector<int>vTarget;
vTarget.resize(v1.size() + v2.size());
merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
cout << "vTarget: " << endl;
for_each(vTarget.begin(), vTarget.end(), [](int val) {cout << val << endl; });
}
//sort
void test02()
{
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v2.push_back(i + 1);
}
//从大到小
sort(v2.begin(), v2.end(), greater<int>());
for_each(v2.begin(), v2.end(), [](int val) {cout << val << endl; });
}
//random_shuffle 洗牌算法
//对指定范围内元素随机调整次序
//再次运行顺序一样 需改变随机种子
void test03()
{
vector<int>v3;
for (int i = 0; i < 10; i++)
{
v3.push_back(i + 1);
}
random_shuffle(v3.begin(), v3.end());
for_each(v3.begin(), v3.end(), [](int val) {cout << val << endl; });
}
//reverse 反转指定范围的元素
//将顺序反转 变为从后往前
void test04()
{
vector<int>v4;
for (int i = 0; i < 10; i++)
{
v4.push_back(i + 1);
}
v4.push_back(5);
reverse(v4.begin(), v4.end());
for_each(v4.begin(), v4.end(), [](int val) {cout << val << endl; });
}
int main()
{
//test01();
//test02();
/*srand((unsigned int)time(NULL));
test03();*/
test04();
}