湘大 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.快速排序是在一个数组里面使用两个指针不断移动和维护

六、精美图片

 

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

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

相关文章

探索规律:Python地图数据可视化艺术

文章目录 一 基础地图使用二 国内疫情可视化图表2.1 实现步骤2.2 完整代码2.3 运行结果 一 基础地图使用 使用 Pyecharts 构建地图可视化也是很简单的。Pyecharts 支持多种地图类型&#xff0c;包括普通地图、热力图、散点地图等。以下是一个构建简单地图的示例&#xff0c;以…

1、Spark SQL 概述

1、Spark SQL 概述 Spark SQL概念 Spark SQL is Apache Spark’s module for working with structured data. 它是spark中用于处理结构化数据的一个模块 Spark SQL历史 Hive是目前大数据领域&#xff0c;事实上的数据仓库标准。 Shark&#xff1a;shark底层使用spark的基于…

竞赛项目 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习

文章目录 0 简介1 课题背景&#x1f6a9; 2 口罩佩戴算法实现2.1 YOLO 模型概览2.2 YOLOv32.3 YOLO 口罩佩戴检测实现数据集 2.4 实现代码2.5 检测效果 3 口罩佩戴检测算法评价指标3.1 准确率&#xff08;Accuracy&#xff09;3.2 精确率(Precision)和召回率(Recall)3.3 平均精…

【立创EDA】【0】基本概念

原理图库设计 符号设计 当在元件库中没有找到需要的元件原理图符号时&#xff0c;需要自己手动绘制点击文件-新建-符号进行新建符号 封装库设计 原理图符号对应焊盘 绘制封装时&#xff0c;可以在立创商城寻找元器件对应的数据手册进行参考 PCB绘制 晶振需要包地&#xf…

ip地址修改器软件哪个好 ip地址切换器有哪些

IP地址修改器是一种常用的网络工具&#xff0c;用于修改计算机或网络设备的IP地址。在网络连接中&#xff0c;IP地址被用于标识每个设备的唯一地址&#xff0c;通过它来实现设备之间的通信和数据传输。然而&#xff0c;有时候我们需要修改IP地址以解决一些网络问题或实现特定的…

如何让你的视频在 TikTok上变得火爆?

TikTok凭借巨大的用户量和商业价值&#xff0c;它从来不缺优质内容。如何在众多内容中脱颖而出获得关注&#xff0c;这并不简单。和泛流量账号不同&#xff0c;商业账号的目的更加明确&#xff0c;也就是说&#xff0c;商业账号并不一定要以高流量最为唯一的追求目标&#xff0…

41.利用matlab 平衡方程用于图像(matlab程序)

1.简述 白平衡 白平衡的英文为White Balance&#xff0c;其基本概念是“不管在任何光源下&#xff0c;都能将白色物体还原为白色”&#xff0c;对在特定光源下拍摄时出现的偏色现象&#xff0c;通过加强对应的补色来进行补偿。 所谓的白平衡是通过对白色被摄物的颜色还原&…

【12】Git工具 协同工作平台使用教程 Gitee使用指南 腾讯工蜂使用指南【Gitee】【腾讯工蜂】【Git】

tips&#xff1a;少量的git安装和使用教程&#xff0c;更多讲快速使用上手Gitee和工蜂平台 一、准备工作 1、下载git Git - Downloads (git-scm.com) 找到对应操作系统&#xff0c;对应版本&#xff0c;对应的位数 下载后根据需求自己安装&#xff0c;然后用git --version验…

代码质量检查工具SonarQube

Devops流水线之SonarQube 文章目录 Devops流水线之SonarQube1. 软件功能介绍及用途2. 软件环境搭建与使用2.1 使用方法2.2 SonarQube相关属性说明2.3 Sonar配置文件内容说明 3. 使用环节4. 检查方法 1. 软件功能介绍及用途 SonarQube是一个用于代码质量管理的开源平台&#xf…

蓝牙运动耳机哪个好、最好的运动蓝牙耳机品牌排行

在忙碌的都市生活中&#xff0c;人们往往容易迷失方向。音乐是一种良药&#xff0c;能够使心灵平静下来&#xff0c;找到正确的方向。生命需要运动&#xff0c;而有趣的运动更能让人们自由自在&#xff0c;释放身心。因此&#xff0c;运动和音乐天然地相辅相成。当我们佩戴一款…

Redis的RDB持久化

Redis是一个键值对数据库服务器&#xff0c;服务器中通常包含着任意个非空数据库&#xff0c;而每个非空数据库中又可以包含任意个键值对&#xff0c;为了方便起见&#xff0c;我们将服务器中的非空数据库以及它们的键值对统称为数据库状态。 举个例子&#xff0c;下图展示了一…

观察者模式

观察者模式 需求1. 定义2. 组成3. 观察者模式原型图4. 实现4.1 抽象观察者4.2 抽象主题4.3 实现观察者4.4 实现主题4.5 测试 需求 实现一种天气实时更新的程序&#xff08;天气推送&#xff09;&#xff0c;当气象站数据更新后&#xff0c;天气接口程序去获取最新天气数据&…

从零开始搭建个人博客网站(hexo框架)

1.工具及环境搭建 1&#xff09;注册GitHub并且新建一个repositories 2&#xff09;下载node.js以及Git 下载链接&#xff1a; 检验安装是否成功&#xff1a; 【注】&#xff1a;MacOS自带Git&#xff0c;可以直接在终端输入git --version进行检验 3&#xff09;新建一个…

生信豆芽菜-箱线图使用说明

网站&#xff1a;http://www.sxdyc.com/visualsBoxplot 一、使用方法 1.打开网址&#xff08;http://www.sxdyc.com/singleCollectionTool?href-diff&#xff09;&#xff0c;选择“箱线图”。 准备数据&#xff1a; 第一个文件为特征的表达文件&#xff0c;第一列为样本&am…

C#,数值计算——基于模拟退火的极小化问题单纯形(下山)算法的计算方法与C#源程序

1 模拟退火 模拟退火算法其实是一个类似于仿生学的算法&#xff0c;模仿的就是物理退火的过程。 我们炼钢的时候&#xff0c;如果我们急速冷凝&#xff0c;这时候的状态是不稳定的&#xff0c;原子间杂乱无章的排序&#xff0c;能量很高。而如果我们让钢水慢慢冷凝&#xff0c…

报错 | Spring报错详解

Spring报错详解 一、前言二、报错提示三、分层解读1.最下面一层Caused by2.上一层Caused by3.最上层Caused by 四、总结五、解决方案 一、前言 本文主要是记录在初次学习Spring时遇到报错后的解读以及解决方案 二、报错提示 三、分层解读 遇到报错的时候&#xff0c;我们需要…

vant van-tabs van-pull-refresh van-list 标签栏+上拉加载+下拉刷新

<template><div class"huibj"><div class"listtab"><!--顶部导航--><div class"topdh"><topnav topname"余额明细"></topnav></div><!--Tab 标签--><van-tabs v-model"…

高压放大器怎么设计(高压放大器设计方案)

高压放大器是一种用于将低电压信号转换成高电压信号的电子设备&#xff0c;广泛应用于通信、雷达、医疗设备等领域。在设计高压放大器时&#xff0c;需要考虑多种因素&#xff0c;如输入输出信号的特性、电路结构的选择、电源和负载匹配等。本文将介绍高压放大器的设计方法和注…

【论文阅读】基于深度学习的时序预测——Pyraformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

统计学和机器学习之间的联系和区别

一、说明 老实说&#xff0c;我厌倦了几乎每天都在社交媒体和我的大学里听到这场辩论。通常&#xff0c;这伴随着一些模糊的陈述来解释这个问题。双方都为此感到内疚。我希望在本文结束时&#xff0c;您将对这些有些模糊的术语有更明智的立场。 二、论点 与普遍的看法相反&…