💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
目录
- 一、常用排序算法
- 二、sort排序算法
-
- [2.1 函数原型](#2.1 函数原型)
- [2.2 示例代码](#2.2 示例代码)
- [2.3 输出](#2.3 输出)
- 三、random_shuffle排序算法
-
- [3.1 函数原型](#3.1 函数原型)
- [3.2 示例代码](#3.2 示例代码)
- [3.3 输出](#3.3 输出)
- 四、merge合并算法
-
- [4.1 函数原型](#4.1 函数原型)
- [4.2 示例代码](#4.2 示例代码)
- [4.3 输出](#4.3 输出)
- 五、reverse排序算法
-
- [5.1 函数原型](#5.1 函数原型)
- [5.2 示例代码](#5.2 示例代码)
- [5.3 输出](#5.3 输出)
- 六、总结
一、常用排序算法
常用的排序算法见下:
sort //对容器内元素进行排序
random shuffle //洗牌 指定范围内的元素随机调整次序
merge //容器元素合并,并存储到另一容器中
reverse // 反转指定范围的元素
二、sort排序算法
对容器内元素进行排序。
2.1 函数原型
sort排序算法的函数原型见下:
cpp
sort(iterator beg,iterator end,_Pred);
参数解析:
按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
beg 开始迭代器
2.2 示例代码
sort排序算法的示例代码见下:
cpp
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <string>
#include <functional>
// 仿函数
void myPrint(int val)
{
cout << val << " ";
}
// 常用排序算法 sort
void test01()
{
vector<int> v;
v.push_back(10);
v.push_back(40);
v.push_back(30);
v.push_back(50);
v.push_back(20);
v.push_back(40);
// 利用sort进行升序
sort(v.begin(),v.end());
for_each(v.begin(),v.end(),myPrint);
cout << endl;
// 改为降序
sort(v.begin(),v.end(),greater<int>());
for_each(v.begin(),v.end(),myPrint);
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
2.3 输出
运行上面2.2中代码,输出见下:
三、random_shuffle排序算法
洗牌,指定范围内的元素随机调整次序。
3.1 函数原型
random_shuffle排序算法函数原型:
cpp
random_shuffle(iterator beg,iterator end);
参数解析:
指定范围内的元素随机调整次序
beg 开始迭代器
end 结束迭代器
3.2 示例代码
random_shuffle排序算法的示例代码见下:
cpp
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <ctime>
// 仿函数
void myPrint(int val)
{
cout << val << " ";
}
// 常用排序算法 random_shuffle
void test01()
{
srand((unsigned int)time(NULL));
vector<int> v;
for (int i = 0;i < 10;i++)
{
v.push_back(i);
}
// 打印原来v容器中的数据
for_each(v.begin(),v.end(),myPrint);
cout << endl;
// 利用洗牌算法,打乱顺序后输出
random_shuffle(v.begin(),v.end());
for_each(v.begin(),v.end(),myPrint);
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
3.3 输出
运行3.2中代码,输出见下:
四、merge合并算法
两个容器元素合并,并存储到另一个容器中。
4.1 函数原型
函数原型见下:
cpp
merge(iterator begl, iterator endl, iterator beg2, iterator end2, iterator dest);
参数解析:
容器元素合并,并存储到另一容器中
beg1 容器1开始迭代器
end1 容器1结束迭代器
beg2 容器2开始迭代器
end2 容器2结束迭代器
dest 目标容器开始迭代器
注意:merge合并的 两个容器必须是有序序列。
4.2 示例代码
merge合并算法的示例代码见下:
cpp
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <ctime>
// 仿函数
void myPrint(int val)
{
cout << val << " ";
}
// 常用排序算法 merge
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0;i < 10;i++)
{
v1.push_back(i);
v2.push_back(i + 2);
}
// 目标容器
vector<int>vTarget;
// 提前给目标容器分配空间
vTarget.resize(v1.size() + v2.size());
// 将有序排列的v1和v2容器数据合并
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin());
// 打印输出容器v1中的数据
for_each(v1.begin(),v1.end(),myPrint);
cout << endl;
// 打印输出容器v2中的数据
for_each(v2.begin(),v2.end(),myPrint);
cout << endl;
// 打印输出合并后的数据
for_each(vTarget.begin(),vTarget.end(),myPrint);
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
4.3 输出
运行上面4.2中代码,输出见下:
五、reverse排序算法
将容器内元素进行反转。
5.1 函数原型
函数原型见下:
cpp
reverse(iterator beg,iterator end);
参数解析:
反转指定范围的元素
beg 开始迭代器
end 结束迭代器
5.2 示例代码
reverse排序算法的示例代码见下:
cpp
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <ctime>
// 仿函数
void myPrint(int val)
{
cout << val << " ";
}
// 常用排序算法 reverse
void test01()
{
vector<int> v;
v.push_back(20);
v.push_back(80);
v.push_back(30);
v.push_back(50);
v.push_back(40);
v.push_back(10);
v.push_back(70);
cout << "反转前:" << endl;
for_each(v.begin(),v.end(),myPrint);
cout << endl;
cout << "反转后:" << endl;
reverse(v.begin(),v.end());
for_each(v.begin(),v.end(),myPrint);
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
5.3 输出
运行上面5.2中代码,输出见下:
六、总结
以上就是C++STL中常用的sort、random_shuffle、merge和reverse排序算法,希望能帮你理解使用。本人参考学习的是黑马程序员,仅作为笔记记录。
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!