c++标准库里的排序函数,用于对给定区间所有元素进行排序。头

文件是#include

使用 Sort()在具体实现中规避了经典快速排序可能出现的、会导

致实际复杂度退化到 o(n²)的极端情况。它根据具体情况使用不

同排序方法,效率极高。

sort 函数基本格式:

sort(首元素地址,尾元素地址的下一个地址,比较函数);

说明:排序方法可以是从大到小也可是从小到大,还可以不写第三

个参数,此时默认的排序方法是从小到大排序。

举例:下面就具体使用 sort()函数结合对数组里的十个数进行排

序做一个说明。

例一:sort 函数没有第三个参数,实现的是从小到大

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10);
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}

例二:从大到小排序

需要加入一个比较函数 cmp()

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

程序如下:

   #include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<endl;
sort(a,a+10,cmp);//在这里就不需要对 cmp 函数传入参数了,这是规则 for(int i=0;i<10;i++)
cout<<a[i]<<endl;
return 0;
}

例三:对结构体数据排序

假设自己定义了一个结构体 node

struct node
{
int a;
int b;
double c;
}

有一个 node 类型的数组 node arr[100],想对它进行排序:先按 a

值升序排列,如果 a 值相同,再按 b 值降序排列,如果 b 还相同,

就按 c 降序排列。就可以写这样一个比较函数:

以下是代码片段:

bool cmp(node x,node y)
{
if(x.a!=y.a) return x.a<y.a;
if(x.b!=y.b) return x.b>y.b;
return x.c>y.c;
}

例四:对字符串的排序

如:

string str[5]={“bbb”,”abc”,”cc”,”b”,”aaaa”};
sort(str,str+5);
for (int i=0;i<5;i++)
cout<<str[i]<<endl;
//依次输出 aaaa,abc,b,bbb,cc

但是,如果是想按字符串的长度对 str 进行递增排序,则先定义

cmp 函数再调用。

bool cmp(string str1,string str2)
{
return str1.length()<str2.length();
}

调用:sort(str,str+5,cmp);

输出:

for(int i=0;i<5;i++)
cout<<str[i]<<endl;

//依次输出 b,cc,bbb,abc,aaaa

另外,在部分题目中会看到以下字样:对*****,按输入的顺序输出。

由于sort在排序过程中不是很稳定,如果有诸如此类的要求,请把sort替换成stable_sort,即稳定排序。(如果考试禁用请无视)

【排序函数讲解】sort-C++的更多相关文章

  1. php中的常用数组函数(八) 排序函数汇总(sort、rsort、usort、asort、uasort、arsort、ksort、uksort、krsort、natsort、natcasesort、array_multisort)

    测试环境:php5.3.29 sort_flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字 ...

  2. R语言学习笔记(七): 排序函数:sort(), rank(), order()

    sort() sort()函数直接对函数进行排序,并返回排序结果. > a <- c(12,4,6,5) > sort(a) [1] 4 5 6 12 rank() rank()函数 ...

  3. [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)

    python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...

  4. C++ 排序函数 sort(),qsort()的用法

    转自:http://blog.csdn.net/zzzmmmkkk/article/details/4266888/ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描述 sort 对给定 ...

  5. C++排序函数sort/qsort使用

    问题描述:        C++排序函数sort/qsort的使用 问题解决:           (1)sort函数使用   注:           sort函数,参数1为数组首地址,参数2是数组 ...

  6. C++ 排序函数 sort(),qsort()的使用方法

    想起来自己天天排序排序,冒泡啊,二分查找啊,结果在STL中就自带了排序函数sort,qsort,总算把自己解脱了~ 所以自己总结了一下,首先看sort函数见下表: 函数名 功能描写叙述 sort 对给 ...

  7. python几个排序函数 sort sorted argsort

    Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...

  8. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  9. FCL源码中数组类型的学习及排序函数Sort函数的分析

    Array 是所有数组的基类ArrayList 解决了所有Array 类的缺点    能动态扩容, 但是类型不安全的,而是会有装箱与拆箱的性能开销List<T> 则是解决了ArrayLis ...

随机推荐

  1. SQL Server 中心订阅模型(多发布单订阅)

    原文:SQL Server 中心订阅模型(多发布单订阅) 大多数SQL Server 复制拓扑都是基于中心发布模型,它是由一个发布复制到一个或者多个订阅.另一个复制模型是中心订阅模型,它使用事务复制由 ...

  2. WPF 在一个dll创建一个Window(包含xaml),在另一个dll中再次继承 会出错

    https://social.msdn.microsoft.com/Forums/vstudio/en-US/e92390eb-bbfa-42fb-baa9-2286444c0dca/the-comp ...

  3. Oracle报错:不是GROUP BY 表达式

    报错:不是GROUP BY 表达式 实例:select sum(hwjz),rq from JcChargeInfo where 1=1  group by rq order by jcchargec ...

  4. 零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异

    原文:零元学Expression Blend 4 - Chapter 36 来玩捉迷藏吧!!!看看ScrollBar的Disabled与Hidden之差异 本次要针对Disabled以及Hidden作 ...

  5. UWP开发:获取用户当前所在的网络环境(WiFi、移动网络、LAN…)

    原文:UWP开发:获取用户当前所在的网络环境(WiFi.移动网络.LAN-) UWP开发:获取用户当前所在的网络环境: 在uwp开发中,有时候,我们需要判断用户所在的网络,是WiFi,还是移动网络,给 ...

  6. 把握每次机会,麒麟芯片5年成就高端(SoC包括AP、基带、ISP等,华为确实牛)

    从2016年11月华为Mate 9 /Mate 9 Pro发布,到2017年2月荣耀V9和华为P10 /P10 Plus 相继发布,这几款都是华为和荣耀的高端旗舰机型,且搭载的都是华为最新旗舰芯片-- ...

  7. Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)

    Raknet是一个基于UDP网络传输协议的C++网络库,允许程序员在他们自己的程序中实现高效的网络传输服务.通常情况下用于游戏,但也可以用于其它项目. Raknet有以下好处: 高性能 在同一台计算机 ...

  8. 为什么需要使用Git客户端?(使用msysgit)

    Git 是 Linux Torvalds 为了帮助管理 Linux® 内核开发而开发的一个开放源码的版本控制软件.正如所提供的文档中说的一样,“Git 是一个快速.可扩展的分布式版本控制系统,它具有极 ...

  9. 代理Delegate的小应用(使用setModelData设置下拉日期对话框)

    前言 在平时关于表格一类的的控件使用中,不可避免需要修改每个Item的值,通过在Item中嵌入不同的控件对编辑的内容进行限定,然而在表格的Item中插入的控件始终显示,当表格中item项很多的时候,会 ...

  10. Yolov3代码分析与训练自己数据集

    现在要针对我们需求引入检测模型,只检测人物,然后是图像能侧立,这样人物在里面占比更多,也更清晰,也不需要检测人占比小的情况,如下是针对这个需求,用的yolov3-tiny模型训练后的效果. Yolov ...