湘大 XTU OJ 1097 排序 题解:c++ 函数库的使用 快速排序 归并排序 冒泡排序
一、链接
1097 排序
二、题目
Description | ||
| N个整数,将其排序输出。 输入 第一行是一个整数K(1<=K<=20),表示有多少个样例,每个样例的第一行是一个整数N(1<=N<=1,000)和一个字符X,X为A时表示升序排序,为D时为降序排列;第二行为N个整数,每个整数都可以使用int表示,每个之间用一个空格隔开。 输出 每个样例输出一行,按排序要求输出整数,每个整数之间输出一个空格。(最后一个整数后不要有空格) | ||
Sample Input | ||
2 3 A 3 5 2 4 D 2 5 7 3 | ||
Sample Output | ||
2 3 5 7 5 3 2 | ||
Source | ||
| ericxie |
三、题意
实现两种排序,升序排序和降序排序
四、代码
c++函数库代码
#include<iostream>
#include<algorithm>using namespace std;const int N=1e3+10;int a[N];int main()
{int t;scanf("%d",&t);while(t--){int x;char op[2];scanf("%d%s",&x,op);for(int i=0;i<x;i++) scanf("%d",&a[i]);sort(a,a+x);if(op[0]=='D') reverse(a,a+x); for(int i=0;i<x-1;i++) printf("%d ",a[i]);printf("%d",a[x-1]);printf("\n");}return 0;
}
快速排序代码
#include<iostream>
#include<algorithm>using namespace std;const int N=1e3+10;int a[N];//快速排序
void quick_sort(int a[],int l,int r)
{if(l>=r) return;int i=l-1,j=r+1,x=a[(l+r)/2];while(i<j){do{i++;}while(a[i]<x);do{j--;}while(a[j]>x);if(i<j) swap(a[i],a[j]);}quick_sort(a,l,j);quick_sort(a,j+1,r);
}int main()
{int t;scanf("%d",&t);while(t--){char op[2];int n;scanf("%d%s",&n,op);for(int i=0;i<n;i++) scanf("%d",&a[i]);quick_sort(a,0,n-1);if(op[0]=='D') reverse(a,a+n);for(int i=0;i<n-1;i++) printf("%d ",a[i]);printf("%d",a[n-1]);printf("\n");}return 0;
}
归并排序
#include<iostream>
#include<algorithm>using namespace std;const int N=1e3+10;int q[N],temp[N];void merge_sort(int q[],int l,int r)
{if(l>=r) return;int x=(l+r)/2;merge_sort(q,l,x);merge_sort(q,x+1,r);int k=0,i=l,j=x+1;while(i<=x&&j<=r){if(q[i]<=q[j]) temp[k++]=q[i++];else temp[k++]=q[j++];}while(i<=x) temp[k++]=q[i++];while(j<=r) temp[k++]=q[j++];for(int i=l,j=0;i<=r;i++,j++){q[i]=temp[j];}
}int main()
{int t;scanf("%d",&t);while(t--){int n;char op[2];scanf("%d%s",&n,op);for(int i=0;i<n;i++) scanf("%d",&q[i]);merge_sort(q,0,n-1);if(op[0]=='D') reverse(q,q+n);for(int i=0;i<n-1;i++) printf("%d ",q[i]);printf("%d\n",q[n-1]);}return 0;
}
c语言冒泡排序
#include<stdio.h>int a[1000+10];void up(int a[],int n)
{for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(a[i]>a[j]){int temp=0;temp=a[i];a[i]=a[j];a[j]=temp;}}}
}void down(int a[],int n)
{for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(a[i]<a[j]){int temp=0;temp=a[i];a[i]=a[j];a[j]=temp;}}}
}int main()
{int t;scanf("%d",&t);while(t--){int n;char op[2];scanf("%d%s",&n,op);for(int i=0;i<n;i++) scanf("%d",&a[i]);if(op[0]=='A') up(a,n);else down(a,n);for(int i=0;i<n-1;i++) printf("%d ",a[i]);printf("%d\n",a[n-1]);}return 0;
}
五、总结
1.快速排序:785. 快速排序
2.归并排序:787. 归并排序
3.使用c++函数库是最简单的方法,直接调用sort函数,然后翻转一下就是从大到小进行降序排序
4. 冒泡排序自己手动实现swap函数即可,非常经典的四个语句
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
5.只管代码美观的话,先进行升序排序,条件判断一下,如果输入的字符串是D,就降序排序,最后按照要求输出即可,时间复杂度,可能会因为把变成原来时间复杂度的常数倍,但是其实没什么影响(针对做题来说)
6.输出有一些问题,行尾不能输出空格,所以只能先输出到倒数第二个元素,然后输出最后一个元素+换行
7. 简单来说快速排序是先移动数组元素再递归,归并排序是先递归再移动数组元素,并且需要使用一个额外的临时数组元素,归并排序是两个部分是排好序的,把两个排好序的部分存到临时数组里面,最后面还要把这个临时数组里面的所有元素存回原来的数组。
8.快速排序是在一个数组里面使用两个指针不断移动和维护
六、精美图片

相关文章:
湘大 XTU OJ 1097 排序 题解:c++ 函数库的使用 快速排序 归并排序 冒泡排序
一、链接 1097 排序 二、题目 Description N个整数,将其排序输出。 输入 第一行是一个整数K(1<K<20),表示有多少个样例,每个样例的第一行是一个整数N(1<N<1,000)和一个字符X&…...
Stable Diffusion AI绘图教学
课程介绍下载 这门课程将教授学生使用Stable Diffusion AI绘图工具进行数据可视化和图形设计。学生将学习基本的绘图原理、数据分析技巧,以及如何使用Stable Diffusion AI创建高质量的图表和可视化作品。通过实践项目和案例研究,学生将提升绘图技能&…...
39、传输层的任务和协议
从本节内容开始,我们学习TCP/IP模型的传输层的知识。传输层是TCP/IP模型中的重要组成部分,如果没有传输层的处理,那么源主机发送的IP数据包到达目的主机之后,目的主机将不知道这个数据是哪个应用程序的数据,就不能很好…...
系统架构设计专业技能 · 网络规划与设计(三)【系统架构设计师】
系列文章目录 系统架构设计专业技能 网络规划与设计(三)【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计(四)【系统架构设计师】 系统架构设计高级技能 软件架构设计(一)【系统架构设计师…...
使用Matplotlib判断鼠标是否点击在当前线上的详细指南
系列文章目录 文章目录 系列文章目录前言一、导入必要的库二、创建图表和线条三、定义鼠标点击事件处理函数四、显示图表总结前言 Matplotlib是一个强大的绘图库,用于在Python中创建各种类型的图表和可视化。本文将详细介绍如何使用Matplotlib来判断鼠标是否点击在当前线上,…...
http get、post、put
HTTP协议定义了多种请求方法,用于不同的操作。最常见的有 GET、POST 和 PUT。 GET:GET 是最常用的方法,通常用于请求服务器发送某个资源。GET 请求只通过 URL 传送数据,数据信息会附在 URL 之后,以参数的形式附加。由于这种传送方式的限制,GET 请求的数据量较小,且安全性…...
仅使用 CSS 创建打字机动画效果
创建打字机效果比您想象的要容易。虽然实现这种效果的最常见方法是使用 JavaScript,但我们也可以使用纯 CSS 来创建我们的打字机动画。 在本文中,我们将了解如何仅使用 CSS 创建打字机动画效果。它简单、漂亮、容易。我们还将看看使用 CSS 与 JavaScrip…...
pytest fixture 高级使用
一、fixture中调用fixture 举例: 输出: 说明:登录fixture 作为参数传递到登出方法中,登录方法的返回值就可以被登出方法使用 二、在fixture中多参数的传递(通过被调用函数传参) 举例: 输出&a…...
远程控制医疗行业应用解析:如何满足医院合规需求?
远程控制医疗行业应用解析:如何满足医院合规需求? 作为一个起源于IT行业的技术,以远程桌面为基础的远程控制技术目前在医疗领域也已经有了比较广阔的应用前景,尤其是在医疗数字化系统/设备的远程运维场景,已经有了一些…...
【C++】开源:glog日志库配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍glog日志库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…...
使用 React Native CLI 创建项目
React Native 安装的先决条件和设置 需要掌握的知识点 掌握 JavaScript 基础知识掌握 React 相关基础知识掌握 TypeScript 相关基础知识 安装软件前需要首先安装Chocolatey。Chocolatey 是一种流行的 Windows 包管理器。 安装 nodejs 和 JDK choco install -y nodejs-lts …...
在R中将列表(list)转换为向量(vector)
问题:将列表中的所有元素“展平”,赋值给一个向量 解决方案:使用unlist()函数; 在许多情况下需要向量,例如,baseR中的许多统计函数需要一个向量作为输入,例如,如果iq.score是一个包…...
access怎么做进销存?借助access开发进销存管理应用
我不太推荐使用Access,因为他的缺点还是比较明显的: 1、软件自身限制 不能用于互联网:使用Access制作好的管理软件,访问页只能在局域网中使用;只能在Windows上运行:Access仅支持windows的运行环境&#x…...
css实现卡片的左上角有一个三角形的遮盖效果
需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …...
中间件RabbitMQ消息队列介绍
1. MQ的相关概念 1.1 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息…...
MySQL不知道密码,直接修改密码
很简单,我们跳过验证,直接进去修改就好 修改配置文件 vim /etc/my.cnf在[mysqld]下直接添加配置 skip-grant-tables如图: 保存,退出即可。 重启服务 service mysqld restart进入MySQL #(直接点击回车,密码为空)…...
Win10关闭自动更新的方法和影响(Windows modules installer worker cpu占用过高)
目录 问题描述: Windows modules installer worker是什么? Win10关闭自动更新的方法: Win10关闭自动更新的影响: 问题描述: 有时我们在使用电脑的过程中会突然出现电脑运行过慢,发热,风扇噪…...
Xcode 基座打包
Xcode基座打包-APP更新版本内容无效 问题:解决: 问题: 使用xcode基座打包之后,上传到appstore进行提审发布。 用户在appstore商城进行更新下载,打开更新后的APP发现版本号是最新的,APP里面的其他内容还是上…...
最强自动化测试框架Playwright(9)- 下载文件
对于页面下载的每个附件,都会发出 page.on(“download”) 事件。 下载开始后,将发出下载事件。下载完成后,下载路径将变为可用 所有这些附件都下载到一个临时文件夹中。可以使用事件中的下载对象获取下载 URL、文件系…...
python爬虫实战(1)——网站小说
整本小说的爬取保存 目标大致思路页面的爬取解析—XPath请求网页内容解析网页内容正文爬取与解析单个页面数据获取爬取所有页面 数据清洗 经过学习基础,我们学以致用一下子,爬取小说,注意这个小说本身是免费的哦,以后再进阶。 本次…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
