常用排序算法
1.sort
功能:
对容器内元素进行排序
核心语句:
sort(iterator beg, iterator end, _Pred);
如果没有 _Pred,默认从小到大
代码:
//从小到大排序
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<int>v;
v.push_back(1);
v.push_back(6);
v.push_back(5);
v.push_back(1);
v.push_back(2);
v.push_back(1);
sort(v.begin(), v.end());
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
/*
1
1
1
2
5
6
Program ended with exit code: 0
*/
//从大到小
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
vector<int>v;
v.push_back(1);
v.push_back(6);
v.push_back(5);
v.push_back(1);
v.push_back(2);
v.push_back(1);
sort(v.begin(), v.end(),greater<int>());
//greater<int>()为内置函数
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
/*
6
5
2
1
1
1
Program ended with exit code: 0
*/
2.random_shuffle
功能:
指定范围内的元素随机调整次序
核心语句:
random_shuffle(iterator beg, iterator end);
指定范围内的元素随机调整次序
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<ctime>
using namespace std;
int main()
{
srand((unsigned int)time(NULL));
//时间种子
vector<int>v;
for(int i=0;i<=6;i++)
{
v.push_back(i);
}
random_shuffle(v.begin(), v.end());
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
random_shufflfflffle洗牌算法比较实用,使用时记得加随机数种子
3.merge
功能:
两个容器元素合并,并存储到另一容器中
核心语句:
merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);
容器元素合并,并存储到另一容器中
注意: 两个容器必须是有序的
beg1 容器1开始迭代器
end1 容器1结束迭代器
beg2 容器2开始迭代器
end2 容器2结束迭代器
dest 目标容器开始迭代器
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<ctime>
using namespace std;
int main()
{
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());//合并 需要两个有序序列
for(vector<int>::iterator it=vtarget.begin();it!=vtarget.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
4.reverse
功能:将容器内元素进行反转
核心语句:
reverse(iterator beg, iterator end);
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<ctime>
using namespace std;
int main()
{
vector<int> v;
for (int i = 0; i < 10 ; i++)
{
v.push_back(i);
}
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
reverse(v.begin(), v.end());
//反转后:
for(vector<int>::iterator it=v.begin();it!=v.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}
/*
0 1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 0
Program ended with exit code: 0
*/