sort()用法简介
void sort( RandomIt first, RandomIt last );
void sort( RandomIt first, RandomIt last, Compare comp );
作用:将从地址first开始 ,到地址last结束的内容进行排序。
sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序,它会根据 数据特征 选择最合适的算法。
时间复杂度:n*log(n)
当我们排序的数据是能直接比较而且是需要从小到大排序的时:
可以直接用第一种形式的sort()
其他情况
我们需要自己写一个cmp(data a,data b)函数。a代表的是前面的数据,b代表后面的数据,通过这个函数计算机我们想要的排序效果是怎么样的。
函数 表示我们想要的排序效果
直接看代码
//sort() 排序
#include<iostream>
#include<algorithm>// sort()
using namespace std;
int cmp(int a,int b)//从大到小排序要用到的方法
{
return a>b;
}
int main(){
int a[5]={5,2,1,3,4};
//sort(第一个元素地址,第一个元素地址+元素个数)
//sort(a,a+5);//从小到大排序
sort(a,a+5,cmp);//从大到小排序
for(int i=0;i<5;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
/*
遇到结构体或者其他计算机不知道 怎么比较的数据类型
我们可以通过cmp函数把比较规则告诉计算机
*/
//sort() 实现结构体排序
#include<bits/stdc++.h>
struct bs {
int a;
int b;
} x[2000];
bool cmp(bs x,bs y) {
return x.b<y.b;
}
using namespace std;
int main() {
int n,sum=1,end;
scanf("%d",&n);
for(int i=1; i<=n; i++)
cin>>x[i].a>>x[i].b;//(读入数据)
sort(x+1,x+n+1,cmp);//(按照结构体中的b升序排序)
for(int i=1; i<=n; i++)
cout<<x[i].a<<" "<<x[i].b;//(读入数据)
return 0;
}
这里我们需要注意下last地址,它应该是最都一个元素后面的地址。
比如 n 个元素的整形数组a[],
如果从下标0开始存储,应该写sort(a,a+n)
如果从下标1开始存储,应该写sort(a+1,a+n+1)
可以这么理解三个参数
sort(首元素地址,首元素地址+元素个数,比较方法)