蓝桥杯:C++排序
排序
排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。

第(3)种排序算法不是基于比较的,而是对数值按位划分,按照以空间换取时间的思路来排序。看起来它们的复杂度更好,但实际上它们的应用环境比较苛刻,在很多情况下并不比前几种排序算法更好。
排序是基本的数据处理,读者需要认真体会这些算法的思路和操作方法。不过,在算法竞赛中,一般不需要手动编写这些排序算法,而是直接使用库函数,例如C++的sort()函数。
STL的排序函数sort()有以下两种定义:
(1)void sort (RandomAccessIterator first, RandomAccessIterator last);
(2)void sort (RandomAccessIterator first, RandomAccessIterator last,Compare comp);

简称:前闭后开。
sort()支持从大到小的排序,也支持从小到大的排序。sort()自带4种排序:less、greater、less_equal、greater_equal。默认情况下,sort()按从小到大进行排序,less可以不写。
代码演示:
#include<bits/stdc++.h>
using namespace std;
bool my_less(int i, int j) {return (i < j); //自定义小于函数
}
bool my_greater(int i, int j) {return (i > j); //自定义大于函数
}
int main () {int a[]= {3,7,2,5,6,8,5,4};sort(a,a+4); //对前4个数排序,结果:2 3 5 7 6 8 5 4for(int i=0; i<8; i++) cout<<a[i]<< " ";cout<<”\n”; //下面可以复制这一行输出sort(a,a+8,less<int>()); //从小到大排序,结果:2 3 4 5 5 6 7 8sort(a,a+8,my_less); //自定义排序,结果:2 3 4 5 5 6 7 8sort(a,a+8,greater<int>()); //从大到小排序,结果:8 7 6 5 5 4 3 2sort(a,a+8,my_greater); //自定义排序,结果:8 7 6 5 5 4 3 2vector<int> c = {1,2,3,4,5,6,7,8};sort(c.begin(),c.end(),my_greater); //结果:8 7 6 5 4 3 2 1for(int i=0; i<c.size(); i++) cout<<c[i]<< " ";cout<< "\n";string s="hello world"; sort(s.begin(),s.end());cout<<s; //输出:dehllloorw。注意第一个是空格return 0;
}
C++的sort()有两个优点:能在原数组上排序,不需要新的空间;能在数组的局部区间上排序。
例题1-统计数字

代码:
#include<bits/stdc++.h>
using namespace std;
int nums[200010];//n<=200000,我们多申请一点,多10就行了。
int main() {int n;scanf("%d",&n);for(int i = 1; i <= n; i++) scanf("%d",&nums[i]);sort(nums+1, nums+1+n);int cnt = 0;for(int i = 1; i <= n; i++) {cnt++;//某个数出现的次数if(nums[i] != nums[i+1]) {printf("%d %d\n", nums[i], cnt); //说明这个数结束了,轮到下一个数了,记录一次cnt = 0; //置0,重新计数}}
}
例题2-错误票据

题目分析:本题是简单题,解题思路是读取所有数字,先排序,然后查找丢失的数字和重复的数字。本题的麻烦之处是输入的处理。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4+10;//申请的数组比预期的要大一点。
int a[N];
int main() {int n;cin >> n;int cnt = 0;while(scanf("%d", &a[cnt]) != EOF) cnt++; //注意读数据的写法,下面会讲解sort(a, a+cnt);//排序int ans1, ans2;for(int i = 1; i < cnt; i++) {if(a[i] - a[i-1] > 1) ans1 = a[i-1]+1; //查找断号if(a[i] == a[i-1]) ans2 = a[i]; //查找重号}cout << ans1 << " " << ans2;return 0;
}
比赛经常有这样的代码:while(scanf(“%d%d”)!=EOF),这玩意啥意思呢?首先scanf你写while里就很奇怪了,初学者表示没见过这么嵌套写的,再加个EOF更离谱了。
首先这个代码scanf能写while里是因为scanf(“%d%d”)!=EOF本身是个逻辑判断,也就是真或者假,所以可以作为条件判断写到while里。
EOF到底啥玩意?
您不妨打开我们最常用的stdio.h这个头文件,然后搜索EOF即可发现答案!(蓝桥杯指定编译器devcpp中怎么打开这个文件呢?按住ctrl然后用鼠标点击stdio.h即可进入)
找到了:

EOF其实就是-1!
也就是说EOF就是个数字,被定义为-1而已!
在我们进行包括scanf等的输入函数使用时,其实用户在cmd中的输入实际是存放于缓冲区当中,当用户键入回车那一瞬间,之前输入的数据才会被存进去,而这里无论是单个字符还是字符串,我们都知道scanf的返回值呢是表示成功接受到的对象的个数,那这里如果遇到特殊情况,比如缓冲区文件流满等问题,那么scanf将如何处理呢?答案是返回-1 ! 这里不光是scanf,返回值为个数的函数,遇到文件流满大多都会返回-1,所以这个-1用的比较多,那么stdio.h就索性专门定义一个宏来表示,取End Of File(文件末尾的意思)的前三个字母即组成EOF,所以也就有了 #define EOF (-1) 这样的话!
例题3.结构体排序


代码:
#include<bits/stdc++.h>
using namespace std;
struct stu {int id; //学号int c,m,e; //语文、数学、英语成绩int sum;
} st[305];
bool cmp(stu a,stu b) {if(a.sum > b.sum) return True;else if(a.sum < b.sum) return False;else { //a.sum == b.sumif(a.c > b.c) return True;else if(a.c < b.c) return False;else { //a.c == b.cif(a.id > b.id) return False;else return True;}}
}
int main() {int n;cin>>n;for(int i=1; i<=n; i++) {st[i].id = i; //学号cin >> st[i].c >> st[i].m >> st[i].e;st[i].sum = st[i].c + st[i].m + st[i].e; //总分}sort(st+1,st+1+n,cmp);for(int i=1; i<=n; i++) cout<<st[i].id<<" "<<st[i].sum<< endl;return 0;
}
相关文章:
蓝桥杯:C++排序
排序 排序和排列是算法题目常见的基本算法。几乎每次蓝桥杯软件类大赛都有题目会用到排序或排列。常见的排序算法如下。 第(3)种排序算法不是基于比较的,而是对数值按位划分,按照以空间换取时间的思路来排序。看起来它们的复杂度更好,但实际…...
数据结构-堆
1.容器 容器用于容纳元素集合,并对元素集合进行管理和维护. 传统意义上的管理和维护就是:增,删,改,查. 我们分析每种类型容器时,主要分析其增,删,改ÿ…...
奔跑吧小恐龙(Java)
前言 Google浏览器内含了一个小彩蛋当没有网络连接时,浏览器会弹出一个小恐龙,当我们点击它时游戏就会开始进行,大家也可以玩一下试试,网址:恐龙快跑 - 霸王龙游戏. (ur1.fun) 今天我们也可以用Java来简单的实现一下这…...
Ubuntu 1804 And Above Coredump Settings
查看 coredump 是否开启 # 查询, 0 未开启, unlimited 开启 xiaoUbuntu:/var/core$ ulimit -c 0# 开启 xiaoUbuntu:/var/core$ ulimit -c unlimited查看 coredump 保存路径 默认情况下,Ubuntu 使用 apport 服务处理 coredump 文件ÿ…...
docker 2:安装
docker 2:安装 ubuntu 安装 docker sudo apt install docker.io 把当前用户放进 docker 用户组,避免每次运行 docker 命都要使用 sudo 或者 root 权限。 sudo usermod -aG docker $USERid $USER 看到用户已加入 docker 组 …...
LeetCode Python - 19.删除链表的倒数第N个结点
目录 题目答案运行结果 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输入:head [1], n 1 输出&a…...
Spring Boot 笔记 005 环境搭建
1.1 创建数据库和表(略) 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删,删了会报错 2.3.3 引入spring web依赖…...
【解决(几乎)任何机器学习问题】:超参数优化篇(超详细)
这篇文章相当长,您可以添加至收藏夹,以便在后续有空时候悠闲地阅读。 有了优秀的模型,就有了优化超参数以获得最佳得分模型的难题。那么,什么是超参数优化呢?假设您的机器学习项⽬有⼀个简单的流程。有⼀个数据集&…...
面试计算机网络框架八股文十问十答第七期
面试计算机网络框架八股文十问十答第七期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)UDP协议为什么不可…...
Codeforces Round 926 (Div. 2)
A. Sasha and the Beautiful Array(模拟) 思路 最大值减去最小值 #include<iostream> #include<algorithm> using namespace std; const int N 110; int a[N];int main(){int t, n;cin>>t;while(t--){cin>>n;for(int i 0; i…...
构建智慧交通平台:架构设计与实现
随着城市交通的不断发展和智能化技术的迅速进步,智慧交通平台作为提升城市交通管理效率和水平的重要手段备受关注。本文将探讨如何设计和实现智慧交通平台的系统架构,以应对日益增长的城市交通需求,并提高交通管理的智能化水平。 ### 1. 智慧…...
移动端设置position: fixed;固定定位,底部出现一条缝隙,不知原因,欢迎探讨!!!
1、问题 在父盒子中有一个子盒子,父盒子加了固定定位,需要子盒子上下都有要边距,用margin或者padding挤开时,会出现缝隙是子盒子背景颜色的。 测试过了,有些手机型号有,有些没有,微信小程序同移…...
有关网络安全的课程学习网页
1.思科网络学院 免费学习skillsforall的课程 课程链接:Introduction to Cybersecurity by Cisco: Free Online Course (skillsforall.com) 2.斯坦福大学计算机和网络安全基础 该证书对于初学者来说最有价值,它由最著名的大学之一斯坦福大学提供。您可…...
计算机网络-面试题
一、基础 1、网络编程 网络编程的本质是多台计算机之间的数据交换存在问题 如何准确的定位网络上一台或多台主机如何进行可靠传输2、网络协议 在计算机网络有序的交换数据,就必须遵守一些事先约定好的规则,比如交换数据的格式、是否需要发送一个应答信息。这些规则被称为网络…...
C++虚函数
C虚函数 在C中,虚函数(Virtual Function)是一个使用关键字virtual声明的成员函数,它在基类中被声明,以便在任何派生类中被重写(Override)。使用虚函数的目的是实现多态性——一种允许使用基类指…...
MySQL数据库基础(二):MySQL数据库介绍
文章目录 MySQL数据库介绍 一、MySQL介绍 二、MySQL的特点 三、MySQL版本 四、MySQL数据库下载与安装 1、下载 2、安装 五、添加环境变量(Windows) 六、检测环境变量是否配置成功 MySQL数据库介绍 一、MySQL介绍 MySQL是一个关系型数据库管理…...
常用文件命令
文章目录 文件命令文件内容查看catnlmoreless(more的plus版)headtailod 文件属性操作用户权限常见的权限chownchmodchgrpumask 隐藏属性常见的隐藏属性lsattrchattr 查找文件查看文件类型查找文件位置whichwhereislocatefind 文件操作(复制、…...
在屏蔽任何FRP环境下从零开始搭建安全的FRP内网穿透服务
背景 本人目前在境外某大学读博,校园网屏蔽了所有内网穿透的工具的数据包和IP访问,为了实现在家也能远程访问服务器,就不得不先开个学校VPN,再登陆。我们实验室还需要访问另一个大学的服务器,每次我都要去找另一个大学…...
OpenGL-ES 学习(1)---- AlphaBlend
AlphaBlend OpenGL-ES 混合本质上是将 2 个片元的颜色进行调和(一般是求和操作),产生一个新的颜色 OpenGL ES 混合发生在片元通过各项测试之后,准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值,不再是新…...
Python 函数的学习笔记
Python 函数的学习笔记 0. Python 函数的概要说明1. 自定义函数示例2. 匿名函数示例3. 内置函数示例3-1. filter() 示例3-2. map() 示例3-3. reduce() 示例 4. 可变长参数*args和**kwargs示例4-1. *args(Positional Variadic Arguments)4-2. **kwargs&am…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
