本文共 2058 字,大约阅读时间需要 6 分钟。
这篇来学习几个常见的排序相关的算法,前面我们学习过sort()这个排序算法,传入迭代器开始和结束,第三个参数如果不填,默认就是升序,如果第三个参数是一个仿函数,返回值类型是bool,也叫谓词,就按照你传入的规则进行排序。
1.排序相关的算法
sort //对容器内元素进行排序random_shuffle //洗牌,指定范围内元素随机调整次序merge //容器元素合并,并存储到另一个容器中reverse //反转指定范围的元素
2.sort
作用:给容器指定范围的元素进行排序
函数原型:sort(iterator begin, iterator end, _Pred);
一共三个参数,迭代器开始位置,迭代器结束位置,谓词,仿函数返回值类型是bool
下面来一个例子,先是默认排序,然后倒序
#include#include #include #include using namespace std;class MyPrint{public: void operator()(int val) { cout << val << " "; }};class MySort{public: bool operator()(int v1, int v2) { return v1 > v2; }};void test01(){ vector v; v.push_back(10); v.push_back(30); v.push_back(40); v.push_back(20); v.push_back(50); // sort排序,默认升序 sort(v.begin(), v.end()); for_each(v.begin(), v.end(), MyPrint()); cout << endl; // sort排序,降序 vector v2; v2.push_back(10); v2.push_back(30); v2.push_back(40); v2.push_back(20); v2.push_back(50); sort(v2.begin(), v2.end(), MySort()); for_each(v2.begin(), v2.end(), MyPrint()); cout << endl;}int main(){ test01(); system("pause"); return 0;}
验证结果
3.random_shuffle
可以把指定范围内的元素随机打乱顺序
函数原型:random_shuffle(iterator beg, iterator end);
代码示例:
#include#include #include #include using namespace std;class MyPrint{public: void operator()(int val) { cout << val << " "; }};void test01(){ vector v; v.push_back(10); v.push_back(30); v.push_back(40); v.push_back(20); v.push_back(50); // random_shuffle 打乱顺序 random_shuffle(v.begin(), v.end()); for_each(v.begin(), v.end(), MyPrint()); cout << endl; random_shuffle(v.begin(), v.end()); 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;}
测试结果:
这个结果,每次运行都不一样,5个数字随机打乱顺序
转载地址:http://mexws.baihongyu.com/