排序算法
算法简介
sort // 对容器内元素进行排序
random_shuffle // 洗牌 指定范围内的元素随机调整次序
merge // 容器元素合并, 并存储到另一容器中
reverse // 反转指定范围内的元素
1. sort
功能:对容器内部分区间按某种规则进行排序
函数原型:
sort(iterator beg, iterator end, _Pr)
按规则对区间[beg, end)内的元素进行排序
beg 区间开始迭代器
end 区间结束迭代器
_Pr 谓词
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// sort void myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v;v.push_back(80);v.push_back(20);v.push_back(60);v.push_back(40);v.push_back(50);// 默认排序规则为从小到大,进行降序排序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(int argc, char const *argv[])
{test01();return 0;
}
2. random_shuffle
功能: 对容器中的元素进行随机打乱
函数原型:
random_shuffle(iterator start, iterator end, random number generator)
参数说明:
start:容器的起始迭代器
end:容器的结束迭代器
random number generator:随机数产生器
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// random_shufflevoid myPrint(int val){cout << val << " ";
}void test01()
{// 随机数种子srand((unsigned int)time(NULL));vector<int> v;for (int i = 0; i < 10; i++){v.push_back(i);}// 打乱顺序random_shuffle(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}
3. merge
功能: 两个容器元素合并,并存储到另一容器中
注意: 两个容器必须是有序的
函数原型:
merge(iterator first1, iterator last1, iterator first2, iterator last2, iterator result)
参数说明:
first1 第一个容器的开始迭代器
last1 第一个容器的结束迭代器
first2 第二个容器的开始迭代器
last2 第二个容器的结束迭代器
result 合并之后的容器的开始迭代器
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// mergevoid myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v1;for (int i = 0; i < 10; i++){v1.push_back(i);}vector<int> v2;for (int i = 0; i < 10; i++){v2.push_back(i);}// 如果不是有序的,则合并后的结果是无序的v2.push_back(1);vector<int> vTarget;// 合并 目标容器需要提前开辟空间vTarget.resize(v1.size() + v2.size());// 合并merge(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());// 遍历for_each(vTarget.begin(), vTarget.end(), myPrint);cout << endl;// 在排序sort(vTarget.begin(), vTarget.end());for_each(vTarget.begin(), vTarget.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}
4. reverse
功能: 将容器中的元素进行逆置
函数原型:
reverse(iterator first, iterator last);
参数说明:
first:开始迭代器
last:结束迭代器
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;// reverse
void myPrint(int val){cout << val << " ";
}void test01()
{vector<int> v;v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);for_each(v.begin(), v.end(), myPrint);cout << endl;// 翻转reverse(v.begin(), v.end());for_each(v.begin(), v.end(), myPrint);cout << endl;
}int main(int argc, char const *argv[])
{test01();return 0;
}