蓝桥杯-sort排序(上)

news2024/9/28 9:22:30

在这里插入图片描述

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排序的知识到这里就先结束啦,后期会继续更新学习蓝桥杯的相关知识,欢迎大家持续关注、点赞和评论!❤️❤️❤️

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html+css+js】实现图片轮播效果

简单实现 <html><head><style type"text/css">*{background-color:green;}#lunbo{ width:600px; height:600px;position:relative;left:100px;top:50px;} //定义轮播图片所显示的位置ul{width:100%; height:100%; position:relative;left:0px;top…

基于 SpringBoot+Vue 的读书笔记共享平台的研究与实现,附源码,文档

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

K8s 安装部署-Master和Minion(Node)文档

K8s 安装部署-Master和Minion(Node)文档 操作系统版本&#xff1a;CentOS 7.4 Master &#xff1a;172.20.26.167 Minion-1&#xff1a;172.20.26.198 Minion-2&#xff1a;172.20.26.210&#xff08;后增加节点&#xff09; ETCD&#xff1a;172.20.27.218 先安装部署ETC…

如何用GPT快速写论文?

详情点击链接&#xff1a;如何用GPT快速写论文&#xff1f; 第一&#xff1a;2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二&#xff1a;Op…

CVE-2024-23897 Jenkins 任意文件读取漏洞

项目介绍 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。Jenkins是开源CI&CD软件领导者&#xff0c; 提供超过1000个插…

以太网的 MAC 层

目录 1. MAC 层的硬件地址 48 位的 MAC 地址 2. MAC 帧的格式 以太网 V2 的 MAC 帧格式 无效的 MAC 帧 IEEE 802.3 MAC 与以太网 V2 MAC 帧格式的区别 1. MAC 层的硬件地址 硬件地址又称为物理地址&#xff0c;或 MAC 地址。 IEEE 802 标准为局域网规定了一种 48 位…

多维数组的使用

1. 数组的概念 数组(Array)&#xff1a;是多个相同类型数据按一定顺序排列的集合&#xff0c;并使用一个名字命名&#xff0c;并通过编号的方式对这些数据进行统一管理。 数组中的概念&#xff1a; – 数组名 – 下标&#xff08;或索引&#xff09; – 元素 – 数组的长度 …

flink-java使用介绍,flink,java,DataStream API,DataSet API,ETL,设置 jobname

1、环境准备 文档&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/ 仓库&#xff1a;https://github.com/apache/flink 下载&#xff1a;https://flink.apache.org/zh/downloads/ 下载指定版本&#xff1a;https://archive.apache.org/dist/flink…

【Leetcode】2861. 最大合金数

文章目录 题目思路代码结果 题目 题目链接 假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台…

Redis(八)哨兵机制(sentinel)

文章目录 哨兵机制案例认识异常 哨兵运行流程及选举原理主观下线(Subjectively Down)ODown客观下线(Objectively Down)选举出领导者哨兵选出新master过程 哨兵使用建议 哨兵机制 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新…

深入理解STM32中断处理机制

深入理解STM32中断及其使用方法&#xff08;基于HAL库&#xff09; STM32微控制器作为一款强大的嵌入式系统芯片&#xff0c;在各种应用中都需要使用中断来实现实时响应和处理各种事件。本文将深入讨论STM32中断的概念、HAL库的中断处理机制以及如何在STM32CubeMX中配置和使用…

AI编译器的后端优化策略

背景 工作领域是AI芯片工具链相关&#xff0c;很多相关知识的概念都是跟着项目成长建立起来&#xff0c;但是比较整个技术体系在脑海中都不太系统&#xff0c;比如项目参与中涉及到了很多AI编译器开发相关内容&#xff0c;东西比较零碎&#xff0c;工作中也没有太多时间去做复盘…

特征点匹配 harris

算法的核心是利用局部窗口在图像上进行移动&#xff0c;判断灰度是否发生较大的变化。如果窗口内的灰度值&#xff08;在梯度图上&#xff09;都有较大的变化&#xff0c;那么这个窗口所在区域就存在角点。 这样就可以将 Harris 角点检测算法分为以下三步&#xff1a; 当窗口…

java/node代码 破解“滑动验证码”的移动距离

1.直接上代码结论 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL;p…

【C++中的STL】函数对象

函数对象 函数对象概念谓词概念 内建函数对象算术仿函数关系仿函数逻辑仿函数&#xff08;基本用不到&#xff09; 函数对象概念 重载函数调用操作符的类&#xff0c;其对象常称为函数对象&#xff0c;函数对象使用重载的()时。行为类似函数调用&#xff0c;也叫仿函数。 函数…

2024年2月最新python批量下载快手个人主页短视频代码(带翻页)

python批量下载快手个人主页短视频代码&#xff0c;2024年1月27日测试过了&#xff0c;如果日后更新了&#xff0c;私聊我 快手个人主页分视频和直播回放&#xff0c;直播回放的地址是m3u8&#xff0c;视频的地址是mp4 m3u8我采用的是hm3u8dl_cli这个库就行下载&#xff0c;带…

HarmonyOS Web组件

1. 前言 众所周知&#xff0c;在Android系统App开发中&#xff0c;我们往往会直接跳转到网页。比如微信给你发了一个链接&#xff0c;默认也是在App之内打开的。很多App就只使用一个WebView作为整体框架&#xff0c;这样开发的好处是&#xff0c;只要使用少量的代码即可完成交互…

文本分类识别系统Python+卷积神经网络算法+TensorFlow+Django网页界面

一、介绍 文本分类系统&#xff0c;使用Python作为主要开发语言&#xff0c;通过选取的中文文本数据集&#xff08;“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”&#xff09;&#xff0c;基于Te…

企业培训APP:在线教育系统源码开发指南

本篇文章&#xff0c;小编将为读者讲解如何开发一款功能强大的企业培训APP&#xff0c;以及其中的关键源码开发指南。 一、确定需求与功能模块 在着手开发之前&#xff0c;首先需要明确企业培训APP的需求和功能模块。这包括用户注册与登录、课程管理、学员管理、在线考试、成绩…

Android发展历程及安装

目录 发展历程 下载网址 安装过程 发展历程 安卓基于Linux内核&#xff0c;Linux内核相当于房屋的地基 开源不等于免费&#xff0c;不能商用 安卓一般每半年小更新&#xff0c;一年大更新 对应API相当于别名 现在安卓安全性越来越高&#xff0c;性能越来越快&#xff0c…