一、背景

sort函数用于C++中,对给定区间所有元素进行排序。头文件是#include <algorithm>。

实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和堆排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并不是说它每次排序只选择一种方法,它是在一次完整排序中不同的情况选用不同方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,它会选择堆排序。

函数原型如下

sort(first_pointer, first_pointer + n, cmp)

此函数有3个参数:

  • 第一个参数是要排序的数组的起始地址。
  • 第二个参数是结束的地址(最后一位要排序的地址的下一地址)
  • 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
  • 如果要改为从大到小排序,需要加一个函数compare。

二、字符串比较的实例

不写cmp函数,string 类提供了operator。但这只是按照字典序排序的

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {string a[3];for (int i = 0; i < 3; i++)cin >> a[i];sort(a, a + 3);cout << a[0] << endl << a[1] << endl << a[2] << endl;return 0;
}

如果按长度排序,代码如下

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;bool compare(string a, string b)
{return a.length()<b.length();
}int main() {string a[3];for (int i = 0; i < 3; i++)cin >> a[i];sort(a, a + 3,compare);cout << a[0] << endl << a[1] << endl << a[2] << endl;return 0;
}

三、结构体比较的实例


struct E {char name[101];int age;int score;
} buffer[100];bool cmp(E a, E b)
{if (a.score != b.score)return a.score < b.score;      //分数不等,按分数递增排序int tmp = strcmp(a.name, b.name);  // strcmp是字符串比较函数,相等返回0,大于返回1,小于返回-1if (tmp != 0)return tmp < 0;  //分数相等,逆转字符串比较值,实现按姓名递增排序elsereturn a.age < b.age;  //分数姓名都相等,按年龄递增排序
}int main()
{int n;int i;while (~scanf("%d", &n)) {for (i = 0; i < n; i++)scanf("%s %d %d", &buffer[i].name, &buffer[i].age, &buffer[i].score);sort(buffer, buffer + n, cmp);for (i = 0; i < n; i++)printf("%s %d %d\n", buffer[i].name, buffer[i].age, buffer[i].score);printf("\n");}system("pause");return 0;
}

四、lamda表达式的实例

    vector<int> nums = { 9,6,4,8,7,2 };sort(nums.begin(), nums.end(), [](int x, int y) {return x > y; });for (auto item : nums){cout << item << "  ";}

参考:

用sort给字符串排序_心之所向,无惧无悔!-CSDN博客_c语言sort函数对字符串排序

sort函数详解(史上最完整QAQ) - AlvinZH - 博客园

sort函数用法_huqiaolong的博客-CSDN博客_sort用法

C++的sort函数实现字符串排序相关推荐

  1. MATLAB中关于sort函数的默认排序

    在学习MATLAB的时候,发现sort函数的默认排序有个小点需要注意 这里直接先说:sort(A) 是对A的列向量进行升序排序 但当A只有一行时(此时A也可以视为一个数组),则是直接行向量排序,也就是 ...

  2. java自定义排序函数_JAVA中sort函数的 自定义排序 cmp函数的写法 【java】【cmp】...

    查了很多博客,了解挺多有关cmp函数的问题.所以在这里来总结一下写法.. 我们通常可以用这个cmp函数来改变Arrays.sort()函数的默认排序方法.这里我们以升序排序为例. 基本方法 int c ...

  3. sort 函数实现数值排序

    下面是详细讲解, 比较啰嗦, 嫌弃的请直接看本文最后 什么是sort函数? sort函数是 JS 数组中自带的用于排序的函数 二话不说上代码 var arr = [3,5,6,8,4,1,9,7]; ...

  4. C++的sort函数对于vector排序

    对于vector<pair<int,int>>类型 // An highlighted block vector<pair<int,int>> v; / ...

  5. 用sort函数对vector排序

    前言 排序一共有两种方法,分别是调用仿函数和函数,这里先调用函数进行升序排序,再调用仿函数进行降序排序. 代码 #include<iostream> #include<vector& ...

  6. mysql 中文含数字排序_英语| 124期 Sort 坑爹的字符串排序

    排序功能在系统中很常见,主要是对数字类型的字段进行升降排序.但是针对那些字符串数字或者带字符的数字字符串,普通的Sort排序就会出现各种各样的问题.比如对字符串数字进行降序排序,会出现:9,8,7,6 ...

  7. 6个评委对5选手打分,去掉最高分和最低分,然后求出平均分就是他们的成绩。Sort函数给评分排序,在头文件algorithm中

    //编写一程序统计参赛选手的得分,计分标准为去掉一个最高分和一个最低分后, //对剩余得分求平均值.要求首先从键盘输入评委的个数num,然后输入num个分数(分数为小于等于10的一个正实数), //输 ...

  8. sort()函数排序vector

    sort()函数默认的排序方式为升序,如果需要降序排序,可以自定义排序函数 bool comp(int x ,int y) {return x > y; } 对vector 进行排序时 sort ...

  9. sort函数排序字母c语言,c语言数组用sort函数排序?

    c语言运用sort 排序函数,需要的头文件是什么? sort不属于C语言的标准函数,所以也没有相应的头文件,但是可以自定义. sort 函数为将整型数组从小到大排序. voidsort(int*a,i ...

最新文章

  1. javabean实体类与实体类之间的快速转换
  2. 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法...
  3. Java Service Wrapper
  4. 免费Google地图API使用说明(转)
  5. 计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?
  6. ios html字符转义字符串,iOS HTML特殊字符转译
  7. Linux中的date、cal、bc三个简单命令
  8. frm文件导入mysql5.7_使用frm,ibd文件恢复数据库文件,mysql5.7.31,centos7.5,20200813...
  9. 华为宣布方舟编译器将开源;​苹果秋季发布会定档9月10日;TypeScript 3.6 发布 | 极客头条...
  10. 深度学习 arm linux移植过程整理
  11. 水经注地图下载器注册机机器码过长_微图影像下载参数说明
  12. 如何下载谷歌地球高程为TIF格式的文件
  13. python图片表格转excel表格_Python办公自动化 | word 表格转excel
  14. c语言日历程序实验报告,万年历实验报告.doc
  15. 计算机绘图尺寸标注,计算机绘图AutoCAD尺寸标注演示教学.ppt
  16. CodecContext->gop_size 是什么
  17. docker 之容器编排工具Docker Compose
  18. 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会
  19. Flutter 苹果原生拼音键盘在TextField上输入异常 | 拼音输入过程回调问题
  20. PyCharm控制台Problems提示:Typo: In word ‘___‘

热门文章

  1. 如何让二维码变得好看2
  2. windows xp vc 6.0编译最新net-snmp源码
  3. java健身房会员签到,会员提醒,留言,消费,公告
  4. 微软3D Movie Maker开源
  5. Python 玩转数据 5 - 图解 Python 赋值,浅拷贝 copy.copy() 和 深拷贝 copy.deepcopy() 原理
  6. 背包九讲 python
  7. debian9.6解决firefox浏览器安全权限的问题
  8. php消息队列重发机制,使用消息队列的注意事项
  9. Nginx原理及配置
  10. [Go实战]gin框架+realize实现边写代码边编译,热更新,方便边改边看效果