蓝桥杯-sort排序(上)

在这里插入图片描述

sort排序

  • 🎈1.算法说明
  • 🎈2.例题
    • 🔭2.1例题一
    • 🔭2.2例题二
    • 🔭2.3例题三
    • 🔭2.4例题四
    • 🔭2.5例题五
    • 🔭2.6例题六

🎈1.算法说明

🔎对于一个数组,通过对数组中的元素进行交换,我们可以将数组中的元素按从大到小的或从小到大的顺序排列。当我们希望对数组中的元素进行排序时,我们可以使用C++为我们提供的工具-sort。当我们使用它时,需要先引入一个算法的库-<algorithm>,需要说明的是,sort可以排序任何类型的数据,包括我们自己定义的结构体。
📖如果我们将从arr中开始的元素到第5个元素按从小到大的顺序排列,那么我们可以写成sort(arr,arr+5).
📝如果希望arr中的元素从大到小排列(或按照某一个规则进行排列),我们可以再为sort传入第三个参数-“排列方法”:sort(arr,arr+5,greater<int>())

🎈2.例题

🔭2.1例题一

🔎问题:给定一个长度为N的数组A,请你先从小到大输出它的每个元素,再从大到小输出它的每个元素。输入描述:第一行包含一个整数N,第二行包含N个整数a1,a2,a3,a4…an,表示数组A的元素。输出描述:输出共两行,每行包括N个整数。

📖算法

#include <iostream>
#include <algorithm>
using namespace std;
int arr[500000];
void sort1(int n)
{
	for (int i = 0; i < n; i++)
	{
		cin >> arr[i];
	}
	sort(arr, arr + n);
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
	sort(arr, arr + n, greater<int>());
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}
int main()
{
	int n;
	cin >> n;
	sort1(n);
	return 0;
}

在这里插入图片描述

🔭2.2例题二

🔎问题:给定一个长度为n的数组a,给定一个长度为m的互不相同的数组p,意味着你可以交换a[pi]a[pi+1]任意次。请确定是否可以用仅允许的交换方式使得a数组非降序。输入描述:第一行输入一个nm。第二行输入n个整数a1,a2,a3,a4...an.第三行输入m个整数p1,p2,p3..pm.(1<=m<n<=1000).输出描述:如果可以输出YES,否则输出NO.

📖算法

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n + 1);//定义一个长度为 n 的数组
    vector<int> p(m + 1, 0);// 定义一个长度为 m 全是 0 的数组
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    for (int i = 0; i < m; i++) {
        int k;
        cin >> k;
        if (k <= m)
            p[k] = 1; //防止k越界 
    }
    for (int i = 1; i <= n; i++)
        for (int j = 2; j <= n; j++)
            if (a[j - 1] > a[j]) {
                swap(a[j - 1], a[j]);
                if (!p[j - 1]) {
                    cout << "NO" << endl;
                    return 0;
                }
            }
    cout << "YES" << endl;
    return 0;
}

🔭2.3例题三

🔎问题:小明的老师希望知道班上的信息学尖子生的水平如何。老师请小明同学帮忙算出班上信息学成绩靠前K名的平均成绩。第一行:为小明所在班级的人数N(其中1<=N<=30),第二行:为N个用1个空格隔开的信息学分数(其中分数为100以以内正整数),第三行:老师想计算平均数的尖子生人数K。输出格式:输出一行共一个实数,为信息学分数前K名同学的分数平均分,四舍五入保留两位小数

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;
int score[35];
int main()
{
	int N, K;
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> score[i];
	}
	sort(score, score + N, greater<int>());
	cin >> K;
	float sum = 0.0;
	for (int i = 0; i < K; i++)
	{
		sum += score[i];
	}
	cout << setiosflags(ios::fixed) << setprecision(2) << sum / K << endl;//保留两位有效数字
	return 0;
}

在这里插入图片描述

🔭2.4例题四

🔎问题:小红所在的班级进行了数学考试,老师请小红同学帮忙进行名次排序和各分数段的人数统计工作。现要求如下:将N名同学的考试成绩放在A数组中,各分数段的人数存到B数组中:成绩为100的人数存到B[1]中,成绩为90-99的人数存到B[2]中,成绩为80-89的人数存到B[3]中,成绩为70-79的人数存到B[4]中,成绩为60-69的人数存到B[5]中,成绩为60分以下的存到B[6]中。输入格式:第一行为小红所在班级的人数N(其中1<=N<=30),第二行为N个用1个空格隔开的数学分数(其中分数为100以内的正整数)。输出格式:前N行:每行一个整数是从高到低排序的数学分数。最后一行:是6个按要求,存放到数组B[1]到B[6]中各分数段的人数(各数据之间以1个空格为间隔)。

#include <iostream>
#include <algorithm>
using namespace std;
int score[30];
int B[7] = { 0 };
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> score[i];
	}
	sort(score, score + n, greater<int>());
	for (int i = 0; i < n; i++)
	{
		cout << score[i] << endl;
	}
	for (int i = 0; i < n; i++)
	{
		if (score[i] == 100)
			B[1]++;
		else if (score[i] >= 90)
			B[2]++;
		else if (score[i] >= 80)
			B[3]++;
		else if (score[i] >= 70)
			B[4]++;
		else if (score[i] >= 60)
			B[5]++;
		else 
			B[6]++;
	}
	for (int i = 1; i <= 6; i++)
	{
		cout << B[i] << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

🔭2.5例题五

📝在上面的学习中,我们都是采用sort(score, score + n, greater<int>());来进行降序的排序,那么是否有能用适用更广泛排序的算法呢?这里我们引入了sort()函数的第三个参数,即排序方法。这里我们同样的对10个整数进行从大到小的排序,看看还有什么样的写法?

#include <iostream>
#include <algorithm>
using namespace std;
int a[10000];
bool cmp(int x, int y) //如果x真的大于y,那么x在前面,否则y在前面
{
	return x > y;
}
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	sort(a, a + n, cmp);
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

🔭2.6例题六

🔎问题:我们有N个正整数,均小于10000.现在需要将这些正整数按照除以3的余数从小到大排序,即除以3余0的数排在除以3余1的数前面,除以3余1的数排在除以3余2的数前面。如果余数相等,则按照正整数的值从小到大排序。输入格式:第一行为一个整数N(0<N<101),第二行为用空格隔开的N个正整数,均小于10000。输出格式:输出有一行,为按照题目要求排序后的N个正整数,用空格隔开。

#include <iostream>
#include <algorithm>
using namespace std;
int a[105];
bool cmp(int x, int y) //如果x真的大于y,那么x在前面,否则y在前面
{
	if (x % 3 != y % 3)
	{
		return x % 3 < y % 3;
	}
	else
	{
		return x < y;
	}
}
int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	sort(a, a + n, cmp);
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

好啦,关于sort排序的知识到这里就先结束啦,后期会继续更新学习蓝桥杯的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

新版UI界面影视小程序亲测无问题带详细搭建教程

新版UI界面影视小程序亲测无问题带详细搭建教程 环境php7.0 — fileinfo–redis–sg11 mysql5.5 apache2.4 添加站点php7.0—-创建ftp—-上传后端文件《后端文件修改&#xff0c;/maccms/wxapi/config/dbs.php–修改当前数据库》—-设置ssl—-打开数据库安装cms 安装好后管…

如何写出有效的单元测试?

什么是单元测试 《单元测试的艺术》中对单元测试的定义&#xff1a; 一个单元测试是一段自动化的代码&#xff0c;这段代码调用被测试的工作单元&#xff0c;之后对这个单元的单个最终结果的某些假设进行校验。 单元测试几乎都是用单元测试框架编写的&#xff1b;只要产品代码…

免费数据恢复软件,帮你轻松恢复丢失数据!

“由于我经常会丢失各种文件&#xff0c;因此非常需要一款实用又有效的数据恢复软件&#xff0c;大家有什么推荐的吗&#xff1f;希望能给我出出主意&#xff01;” 随着数字技术的不断发展&#xff0c;数据恢复软件在我们的生活中扮演着越来越重要的角色。当我们的硬盘或其他存…

Bluetooth Device Address(BD_ADDR) - 2

蓝牙核心规范&#xff1a;Core v5.3中关于蓝牙地址的其他说明 Vol 3: Host, Part C: Generic Access Profile 3 User interface aspects 3.2 Representation of Bluetooth parameters 3.2.1 Bluetooth Device Address (BD_ADDR) BD_ADDR 是蓝牙设备使用的地址。在设备发现过…

nav02 学习03 机器人传感器

机器人传感器 移动机器人配备了大量传感器&#xff0c;使它们能够看到和感知周围的环境。这些传感器获取的信息可用于构建和维护环境地图、在地图上定位机器人以及查看环境中的障碍物。这些任务对于能够安全有效地在动态环境中导航机器人至关重要。 机器人的传感器类似人的感官…

单片机学习笔记---独立按键控制LED状态

上一节学习的是独立按键控制LED亮灭 这一节我们先来讲一下按键的抖动&#xff1a; 对于机械开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以…

Leetcode刷题笔记题解(C++):1971. 寻找图中是否存在路径

思路&#xff1a; 1.建立图集&#xff0c;二维数组&#xff0c;path[0]里面存放的就是与0相连的节点集合 2.用布尔数组来记录当前节点是否被访问过&#xff0c;深度优先会使用到 3.遍历从起点开始能直接到达的点&#xff08;即与起点相邻的点&#xff09;&#xff0c;判断那…

判断给定的字符串s是否为Python的保留关键字keyword.iskeyword(s)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 判断给定的字符串s 是否为Python的保留关键字 keyword.iskeyword(s) [太阳]选择题 请问以下代码输出的结果是&#xff1f; import keyword print("【执行】keyword.iskeyword(for)"…

【蓝桥杯冲冲冲】[NOIP2000 提高组] 方格取数

蓝桥杯备赛 | 洛谷做题打卡day19 文章目录 蓝桥杯备赛 | 洛谷做题打卡day19[NOIP2000 提高组] 方格取数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码我的一些话 [NOIP2000 提高组] 方格取数 题目背景 NOIP 2000 提高组 T4 题目描述 设有 N N…

PBM模型学习(五)UDF生长模型

DEFINE_PB_GROWTH_RATE(name, cell, thread, d_i) 该UDF在每个时间步开始时执行,只有在时间步开始时,颗粒粒径才会更新,同时才会UDF才会向文件写入数据GR单位是m/sC_PHASE DIAMETER(c,ts):返回颗粒粒径???,ts为颗粒相的线程C_VOF(cell,thread):颗粒相总体积C_PB DISCI(c…

Kotlin快速入门系列2

Kotlin的基本数据类型 Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是&#xff0c;字符不属于数值类型&#xff0c;是一个独立的数据类型。 Java和kotlin数据类型对照如下&#xff1a; Java基本数据类型 Kotlin对象数据类型 数据类…

vue3+naiveUI二次封装的v-model 联动输入框

根据官网说明使用 源码 <template><div class"clw-input pt-3"><n-inputref"input":value"modelValue":type"type":title"title"clearable:disabled"disabled":size"size"placeholder&…

商家转账到零钱使用教程

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

(大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第一题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; 统计除豪车外&#xff0c;销售最差的车 车辆按批销售&#xff0c;每次销售若干…

IDC机房交换机核心技术与应用指南

IDC机房交换机核心技术与应用指南 ​ 在这个快速发展的数字时代&#xff0c;数据中心作为信息技术的心脏&#xff0c;不仅承载着海量数据的处理、存储和传输&#xff0c;更是支撑着全球企业运营和互联网服务的关键基础设施。在众多构成数据中心的组件中&#xff0c;IDC机房交换…

在autodl训练yolov8时卡在下载字体

1.问题 在autodl训练yolov8到这一步之后会卡住很久 2. 解决办法 Ctric中断后发现是下载Arial字体卡住了&#xff0c;这个字体需要从外网中下载 先手动从链接中下载https://ultralytics.com/assets/Arial.ttf &#xff0c;然后上传到autodl。然后将这个文件移动到/root/.config/…

RabbitMQ问题总结

:::info 使用场景 异步发送&#xff08;验证码、短信、邮件。。。&#xff09;MySQL 和 Redis、ES 之间的数据同步分布式事务削峰填谷… ::: 如何保证消息不丢失 上图是消息正常发送的一个过程&#xff0c;那在哪个环节中消息容易丢失&#xff1f;在哪一个环节都可能丢失 生…

Linux常见指令汇总

目录 pwd√ ls√ cd√ 对文件的理解√ which√ alias√ touch√ linux系统目录结构√ mkdir / tree √ rmdir / rm √ man√ nano√ cp√ mv√ cat√ echo√ linux设计理念和三种重定向总结√ more/less√ head/tail√ wc√ uniq√ date / cal√ find√…

【云原生】Docker私有仓库搭建以及四大容器重启策略

目录 一、registry私有仓库 步骤一&#xff1a;先拉取registry的镜像 步骤二&#xff1a;修改docker的配置文件重启 步骤三&#xff1a;基于registry镜像启动一个容器&#xff0c;可以设置为always重启策略 步骤四&#xff1a;修改想要上传的镜像的标签并上传验证 步骤五&…

83.网游逆向分析与插件开发-背包的获取-自动化助手显示装备数据

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;装备栏数据与算法的C还原-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;849fed846405438d222…