库函数sort的引入

#include<algorithm>
using namespace std;

底层是快排

例题

题目描述:
对输入的n个数进行排序并输出

输入:
输入的第一行包括一个整数n(1<=n<=100).接下来的一行包括n个整数

输出:
可能有多组测试数据,对于每组数据,输出排序后的n个整数,每个数后面都有一个空格

样例输入
4
1 4 3 2
样例输出
1 2 3 4

代码

#include<algorithm>
#include <cstdio>using namespace std;
int main() {int n;int arr[101];scanf_s("%d", &n);for (int i = 0; i < n; i++) {scanf_s("%d", &arr[i]);}sort(arr, arr + n);//排序for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");
}

解析sort

  1. 基础

sort(left【起点】,right【终点】)
left是0,right是array.length,但是是左闭右开
默认得到的是升序序列

  1. 设计排序的规则
    sort(left,right,comp)
    comp用于处理比较和排序
//实现降序
#include<algorithm>
#include <cstdio>
using namespace std;
bool comp(int lhs, int rhs) {//不发生交换的条件下返回真if (lhs > rhs) {return true;}else {return false;}
}
int main() {int arr[8]; for (int i = 0; i < 8; i++) {scanf_s("%d", &arr[i]);//等价于arr+i}sort(arr, arr + 8,comp);//排序,函数指针,不写括号for (int i = 0; i < 8; i++) {printf("%d ", arr[i]);}printf("\n");
}

例题

1 整数奇偶排序
输入10个整数,彼此以空格分隔。重新排序后输出(也按空格分割),要求:
1)首先输出其中的奇数,并且按照从大到小的顺序排列
2)然后输出其中的偶数,并且按照从小到大的顺序排列
分析
什么情况下发生交换?
1)左奇 右偶 不交换
2)左奇大 右奇小 不交换
3)左奇小 右奇大 交换
4)左偶小 右偶大 不交换
5)左偶大 右偶小 交换

#include<algorithm>
#include <cstdio>
using namespace std;
bool comp(int lhs, int rhs) {if (lhs % 2 == 1 && rhs % 2 == 0) {return true;}else if (lhs % 2 == 1 && rhs % 2 == 1 && lhs>rhs) {return true;}else if (lhs % 2 == 0 && rhs % 2 == 0 && lhs < rhs) {return true;}else {return false;}
}
int main() {int arr[10];while (scanf_s("%d%d%d%d%d%d%d%d%d%d", arr, arr + 1, arr + 2, arr + 3, arr + 4, arr + 5, arr + 6, arr + 7, arr + 8, arr + 9) != EOF) {sort(arr, arr + 10, comp);for (int i = 0; i < 10; ++i) {printf("%d ", arr[i]);}printf("\n");}
}

2.成绩排序-I
用一维数组存储学号和成绩,然后按成绩排序输出
1)输入:
的第一行中包括一个整数N(1<=N<=100),它代表学生的个数
接下来的N行中,每行包括两个整数p和q,分别代表每个学生的学号和成绩
2)输出:
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来
如果学生的成绩相同,那么按照学号的大小从小到到排序
3)
样例输入

3
1 90
2 87
3 92

样例输出

2 87
1 90
3 92

分析
自定义类型
struct Student{
int sno;
int score;
}
代码

#include<cstdio>
#include<algorithm>
using namespace std;
struct Student {int num;int grade;
};//分号绝对不能省略
bool comp(Student lhs, Student rhs) {//不发生交换的情况if (lhs.grade < rhs.grade) {return true;}else if (lhs.grade == rhs.grade && lhs.num < rhs.num) {return true;}else {return false;}
}
int main() {Student arr[100];int n;scanf_s("%d", &n);for (int i = 0; i < n; i++) {scanf_s("%d%d", &arr[i].num, &arr[i].grade);}sort(arr, arr + n, comp);for (int i = 0; i < n; i++) {printf("%d %d\n", arr[i].num, arr[i].grade);}
}

3.成绩排序-II
输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排序,相同成绩都按先录入者排序在前的规则处理
示例:

jack 70
peter 96
tom 70
smith 67
从高到低
peter 96
jack 70
tom 70
smith 67
从低到高
smith 67
jack 70
tom 70
peter 96

输入
输入多行,首先输入要排序人的个数,然后输入排序方法0(降序)和1(升序)
再分别输入他们的名字和成绩,以一个空格隔开
输出
按照指定的方法输出名字和成绩,名字和成绩之间以一个空格隔开

#include<cstdio>
#include<algorithm>
using namespace std;
struct Student {char name[50];int grade;int seq;//核心:用序号来模拟稳定排序
};
bool comp0(Student lhs, Student rhs) {if (lhs.grade > rhs.grade) {return true;}else if (lhs.grade == rhs.grade && lhs.seq<rhs.seq) {return true;}else {return false;}
}
bool comp1(Student lhs, Student rhs) {if (lhs.grade < rhs.grade) {return true;}else if (lhs.grade == rhs.grade && lhs.seq < rhs.seq) {return true;}else {return false;}
}
int main() {int N;int order;Student arr[100];while (scanf_s("%d%d", &N, &order) != EOF) {int seq = 0;for (int i = 0; i < N; i++) {scanf_s("%s%d", arr[i].name, &arr[i].grade);arr[i].seq = seq;seq++;}if (0 == order) {sort(arr, arr + N, comp0);}else {sort(arr, arr + N, comp1);}for (int i = 0; i < N; i++) {printf("%s %d\n", arr[i].name, arr[i].grade);}}
}

C++库函数——sort相关推荐

  1. CCF NOI1041. 志愿者选拔【sort】

    原题链接:1041. 志愿者选拔 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A市对所有 ...

  2. 在嵌入式学习过程中,很多人都有这样的困惑!——为什么要学习嵌入式技术?...

    为什么要学习嵌入式技术? 学习嵌入式系统,你将需要详细了解系统功能层的各部分是如何工作的,也会在面向对象编程.GUI.数据库.网络服务等系统集成层的技术方向进行探索.嵌入式系统可以说是麻雀虽小五脏俱全 ...

  3. PHP程序员如何突破成长瓶颈(转)

    作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢? PHP工程师面临 ...

  4. scanf函数和cin的区别、类的数组、C++排序函数

    给定n个字符串,将这n个字符串按照字典序进行排列,此处用排列函数是C++的库函数sort,产生如下两个疑问,望大佬解答 #include <iostream> #include <a ...

  5. PHP工程师面临的成长瓶颈

    作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝,那么你是一名优秀的程序员吗?在进行自我修炼的同时,你是否想过面对各种各样的问题,我该如何突破自身的瓶颈,以便更好的发展呢? PHP工程师面临 ...

  6. 【华科考研复试机试题】华中科技大学考研复试机试题解题报告

    题目来源:牛客网华科考研复试题 以下代码均在牛客网提交通过.(编译器类型为G++5.4) 若以下题解思路有考虑欠缺处,望读者指正. 1.1. 矩阵转置 1.1.1. 题目描述 输入一个N*N的矩阵,将 ...

  7. (推荐)为什么要走嵌入式?

    我们从解读几个问题开始: 1.各种软件技术之间是怎样的关系?     软件技术分为三个层次:     问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算. ...

  8. 如何成为优秀的程序员

    1.各种软件技术之间是怎样的关系? 我把软件技术分为三个层次:  问题域:计算机图形学.音视频编码.信息安全.模式识别.信息检索.自然语言分析.人工智能.科学计算等.  系统集成:C++和Java等面 ...

  9. PHP程序员如何突破技术瓶颈

    2019独角兽企业重金招聘Python工程师标准>>> 身边有几个做PHP开发的朋友,也接触到不少的PHP工程师,他们常疑虑自己将来在技术上的成长与发展,我常给他们一些建议,希望他们 ...

最新文章

  1. 2018-3-2线性表
  2. js创建对象的几种方法
  3. python流程控制语句-Python流程控制语句的深入讲解
  4. NYOJ 118 修路方案(次小生成树)
  5. spring boot之session store type is 'null'
  6. java 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案
  7. 带领国产数据库走向世界,POLARDB底层逻辑是什么?
  8. 【图像处理】人脸检测--皱纹---变老特效
  9. XML数据读取方式性能比较(一) (转)
  10. Nand Flash驱动程序分析
  11. opencv 图像对比度、亮度值调整 和滑动条
  12. 计算机 继续教育培训心得体会,继续教育培训总结.doc
  13. 尺度、空间异质性、干扰、景观多样性、景观连接度,对其概念的理解
  14. linux下STM32开发环境搭建
  15. 浏览器兼容性及调试插件
  16. 1419 最小公倍数挑战(素数性质之两两互质 与 取“3”个数的特殊性)
  17. ibm服务器卡在开机界面_使用HTTPS配置IBM Integration Bus Web用户界面
  18. Picker 选择器
  19. 世界 IT 公司 20 强企业的敏捷转型实例
  20. Python 调用谷歌翻译(2021年3月测试可用)

热门文章

  1. C# 日期转换AM/PM
  2. 联想拯救者r720折腾MacOS12.3.1记录
  3. VESC 电控命令调试记录
  4. Future 用法详解
  5. mongrel2安装手册
  6. electron-vue 制作悬浮球
  7. 解决访问国外公共静态资源速度慢的问题
  8. 【音视频知识】MP4文件格式解析-详解
  9. Shell 编程入门(一)
  10. python处理文件