原文链接https://blog.csdn.net/Architect_chaser/article/details/88322605

从前学习C时,每次排序算法都要自己书写,而且容易书写的算法效率并不高(时间复杂度有点高),效率高的排序算法写起来又太复杂。现在我们终于学到了C++,C++的algorithm头文件里包含了排序算法,最令人开心的是,这种sort()函数的效率还非常高(实质按照排序元素个数选择不同排序方法),今天我们就来学习这种简单又高效的排序函数。

sort()函数给整型数组排序

我们从简单的给整型数组排序讲起,我们先来看看基础用法
sort(一个地址A(从哪一个开始排序),(好好思考这个位置)一个地址B(你想要停止排序的那个元素的后一位地址),一个控制排序规则的函数);好像有点抽象,简单来说,就是从A到B-1的所有元素参与排序,如果是升序,那么排序规则函数不用写,如果是降序或者是其他自定义排序,请看后文cmp函数书写。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[11]={0,1,2,13,45,2,33,1,6,78,4};sort(a,a+11);for(int i=0;i<11;i++){cout<<a[i]<<endl;}return 0;
}

当当,是不是很简单,值得一提的是sort(a,a+11),表明要a[0]一直到a[10]的所有元素参与排序。所以,我们还可以截取部分元素参与排序。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int a[11]={0,1,2,13,45,2,33,1,6,78,4};sort(a+4,a+11);for(int i=0;i<11;i++){cout<<a[i]<<endl;}return 0;
}

这样前面四个元素a[0] a[1] a[2] a[3]就不参与排序了.

深入理解sort函数参数含义

很多同学读到这里已经开始骂人了,为什么从a[0]-a[10]排序,写的是sort(a,a+11)而不是sort(a,a+10)?
为什么从a[4]-a[8]排序写的是sort(a+4,a+9)而不是sort(a+4,a+8)?
哈哈,因为sort函数实际上传参传的是容器的开始迭代器与尾后迭代器。
所以sort(a+5,a+9),是给a[5]到a[8]的元素排序,sort(a+m,a+n)是给从a[m]到a[n-1]的元素排序。

其他的排序方式

刚才我们不写排序规则函数,sort函数默认从小到大排序,现在我们想从大到小排序怎么办呢?
其实也很简单,实现代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{return a>b;
}
int main()
{int a[11]={0,1,2,13,45,2,33,1,6,78,4};sort(a,a+11,cmp);for(int i=0;i<11;i++){cout<<a[i]<<endl;}return 0;
}

是的,只需要加上

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

并且在调用sort的时候第三个参数写cmp就行了。和刚才同样的道理,sort(a,a+11,cmp)是给a[0]到a[10]排序。

string类也可以用sort排序

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
bool cmp(string a,string b)
{return a>b;
}
int main()
{string a[4]={"hhhhh","heheheh","xxxxxx","kkkkkk"};sort(a,a+4,cmp);for(int i=0;i<4;i++)cout<<a[i]<<endl;return 0;
}

c++ sort 转载相关推荐

  1. linux的管道 |和grep命令以及一些其他命令(diff,echo,cat,date,time,wc,which,whereis,gzip,zcat,unzip,sort)...

    linux提供管道符号"|",作用是命令1的输出内容作为命令2的输入内容.通常与grep命令一起使用. 格式:命令1 |命令2 grep命令:全称为global regular e ...

  2. 为什么map对象不能使用stl中的sort函数

    STL所提供的各式各样算法中,sort()是最复杂最庞大的一个.这个算法接受两个RandomAccestlerators(随机存取迭代器),然后将区间内的所有元素以渐增方式由小到大重新排列.第二个版本 ...

  3. 排序陷阱 List.Sort Linq.OrderBy

    部分内容摘自:http://www.th7.cn/Program/net/201511/692766.shtml C#框架里面主要提供了两种排序方式:Array.Sort Linq.Orderby. ...

  4. 转载: 8天学通MongoDB——第三天 细说高级操作

    今天跟大家分享一下MongoDB中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...

  5. springDatasolr 排序

    1 String sortValue = (String) searchMap.get("sort");// ASC DESC 2 String sortField = (Stri ...

  6. /scripts/checkkconfigsymbols.sh

    #!/bin/sh # Find Kconfig variables used in source code but never defined in Kconfig # Copyright (C) ...

  7. Vue之动态class写法总结

    对象方法 最简单的绑定 :class="{ 'active': isActive }" 判断是否绑定一个active :class="{'active':isActive ...

  8. mysql 升序 字段值为NULL 排在后面

    select * from yryz_products_t order by isnull(sort),sort; 转载于:https://www.cnblogs.com/austinspark-je ...

  9. Perl的输出:print、say和printf、sprintf

    print.printf和say都可以输出信息.print和say类似,print不自带换行符,say自带换行符,但要使用say,必须写use语句use 5.010;,printf像C语言的print ...

最新文章

  1. 1分钟10万字大法:量子波动速读、蒙眼翻书穿针,这是席卷15省的最新智商税...
  2. Python 之Re模块(正则表达式)
  3. MySql遇到字段中有空格
  4. struts2 kindeditor teatarea拿不到值问题。
  5. AE合成自动智能剪裁脚本:Auto Crop for Mac
  6. 忽悠CTO搞中台,把自己饭碗都搞砸了
  7. javascript Control flow(控制语句)
  8. 深度探索Qt窗口系统——布局篇
  9. python线程监控_Python多线程的事件监控
  10. 卡巴斯基2009离线升级包制作方法
  11. Xcode5 symbolicatecrash文件路径
  12. HTML+CSS+JavaScript实现旅游网站官网
  13. Robotium-基础理论介绍
  14. 总体均值的区间估计和习题
  15. 常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)
  16. 小生意同样能赚大钱,卖豆芽都能一年存20多万?你怎么看?
  17. 实战篇--优惠券秒杀
  18. C#图形界面汉诺塔Hanoi
  19. 当有人推荐你读什么书时你是属于哪一种
  20. 语音邮件 voice mail 概述

热门文章

  1. ocx 加载 页面卡死
  2. 一个Java 程序的主方法_java application程序中,每一个类中,必有一个主方法main()方法。...
  3. wifi 小程序 透传_微信小程序实现的一键连接wifi功能示例
  4. 为什么HashMap的长度一定是2的次幂?
  5. MP4 全介绍【转载】
  6. 扫描枪中文输入法导致乱码问题
  7. V-Appstore 9Apps(Android)
  8. 新能源汽车应该何去何从?
  9. linux没有桌面安装svn,Linux下安装SVN简单教程
  10. 5个值得关注的L1公链