目录
1.1sort的简介
sort函数包含在头文件<algorithm>中
在使用前需要#include<algorithm>或者使用万能文件(#include <bits/stdc++.h>).
sort是c++标准库中的一个函数模板,用于对指定范围内的元素进行排序.
sort算法使用的是快速排序或者类似快速排序的改进算法,具有较好的平均时间复杂度,一般O(n).
1.2sort的用法
1.2.1默认用法:
sort(起始地址,结束地址的下一位,*比较函数);//默认不写且默认用小于号 升序
int a[1000];
int n;
cin>>n; //读取数组大小
for(int i=1;i<=n;++i) cin >> a[i];
sort(a+1,a+n+1); //[1,n+1)左闭右开
// a[1] a[n+1]
for(int i=1;i<=n;++i) cout<<a[i]<<' ';
1.2.2方法2
sort(起始地址,结束地址的下一位,结束地址的下一位,*比较函数);
vector<int> v = {5,1,3,9,11};
sort(v.begin(),v.end());
//2个输出都可以
for(int i=0;i<v.size();++i) cout<<v[i]<<' ';
for(auto i:v) cout<<i<<' ';
1.3自定义比较函数
1.3.1 函数
sort默认使用小于号进行排序,如果需要自定义规则,可以使用函数
bool cmp(const int &u,const int &v)
{
return u>v;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
vertor<int> v= {5,1,3,9,11};
sort(v.begin(),v.end(),cmp);
for(int i=0;i<v.size();++i) cout<<v[i] <<' '; //输出11 9 5 3 1
}
1.3.2 lambda表达式
vector<int> v = {5,1,3,9,11};
sort(v.beging(),v.end(),[](const int &u,const int &v)
{
return u>v;
});
//输出
for(int i=0;i<v.size();++i) cout<<v[i]<<' ';
1.3.3 结构体 重载小于号
struct Node
{
int u,v;
bool operator < (const Node &m) const
{
return u==m.u ? v<m.v:u<m.u;
}
};
1.4例题
蓝桥杯 1265
//这样是不会通过的因为效率太低了
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b[100];
cin>>a;
for(int i=1;i<=a;i++) cin>>b[i];
sort(b+1,b+a+1);
for(int i=1;i<=a;i++) cout<<b[i]<<' ';
return 0;
}
正确答案
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+3;
int b[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int a;cin>>a;
for(int i=1;i<=a;i++) cin>>b[i];
sort(b+1,b+a+1);
for(int i=1;i<=a;i++) cout<<b[i]<<" \n"[i == a]; //[i==a]其实这里就是判断是否结束
for(int i=a;i>=1;i--) cout<<b[i]<<" \n"[i == 1];
return 0;
}