博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL sort函数的用法
阅读量:5257 次
发布时间:2019-06-14

本文共 2045 字,大约阅读时间需要 6 分钟。

sort在STL库中是排序函数,有时冒泡、选择等O(N^2)算法会超时时,我们可以使用STL中的快速排序O(N log N)完成排序

sort在<algorithm>库里面,原型如下:

template 
void sort ( RandomAccessIterator first, RandomAccessIterator last );template
void sort ( RandomAccessIterator first, RandomAccessIterator last, Compare comp );

他有两种形式一个有三个参数,一个有两个参数,我们先讲讲两个参数的吧!

sort的前两个参数是起始地址和中止地址

如:sort(a,a+n) 表示对a[0] a[1] a[2] ... a[n-1] 排序

代码如下:

#include 
#include
using namespace std;int main() { int n,a[1001]; scanf("%d",&n); //输入有多少个数 for (int i = 1;i <= n;i++) scanf("%d",&a[i]); //输入这个数列 sort(a+1,a+n+1); //对a[1] a[2] a[3] ... a[n] 排序 for (int i = 1;i <= n;i++) printf("%d",a[i]); //输出 return 0'}

这样是默认升序的,那如果是降序呢?

这样,我们就要用到第三个参数,第三个参数是一个比较函数

bool cmp(int a,int b) {    return a > b;}

这个就是降序排序的比较函数,意思:

是a > b时为true,就不交换,a < b时为false,交换

然后我们调用sort(a+1,a+n+1,cmp);就可以对a[1] a[2] a[3] ... a[n] 进行排序了

sort也能对结构体排序,如:

#include 
#include
using namespace std;struct Node { int x,y;}p[1001];int n;bool cmp(Node a,Node b) { if (a.x != b.x) return a.x < b.x; //如果a.x不等于b.x,就按x从小到大排 return a.y < b.y; //如果x相等按y从小到大排}int main() { scanf("%d",&n); for (int i = 1;i <= n;i++) scanf("%d%d",&p[i].x,&p[i].y); sort(p+1,p+n+1,cmp); for (int i = 1;i <= n;i++) scanf("%d %d\n",p[i].x,p[i].y); return 0;}

以上代码的意思是,如果a.x不等于b.x,就按x从小到大排;如果x相等按y从小到大排

结构体还可以重载运算符,使sort只用两个参数就可以按自己的规则排序,如:

#include 
#include
using namespace std;struct Node { int x,y; bool operator < (Node cmp) const { if (a.x != cmp.x) return a.x < cmp.x; return a.y < cmp.y; }}p[1001];int n;//bool cmp(Node a,Node b) {// if (a.x != b.x) return a.x < b.x; //如果a.x不等于b.x,就按x从小到大排// return a.y < b.y; //如果x相等按y从小到大排//}int main() { scanf("%d",&n); for (int i = 1;i <= n;i++) scanf("%d%d",&p[i].x,&p[i].y); sort(p+1,p+n+1); for (int i = 1;i <= n;i++) scanf("%d %d\n",p[i].x,p[i].y); return 0;}

 

转载于:https://www.cnblogs.com/lrj124/p/7254043.html

你可能感兴趣的文章
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
S5PV210根文件系统的制作(一)
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
数据清洗
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
查看>>