C++ 常用排序算法
排序算法
算法简介
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_shuffle
void 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;
// merge
void 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;
}