湘大 XTU OJ 1097 排序 题解:c++ 函数库的使用 快速排序 归并排序 冒泡排序

news2024/12/25 12:53:27

一、链接

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

六、精美图片

 

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

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

相关文章

136.只出现一次的数字+26.删除有序数组中的重复项

目录 一、136.只出现一次的数字 二、代码 三、26删除有序数组中的重复项 四、代码 一、136.只出现一次的数字 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 二、代码 交换律&#xff1a;a ^ b ^ c <> a ^ c ^ b 任何数与0异或为任何数 0 ^ n >…

第三篇|金融人数据来源有哪些

数据对于金融行业真的很重要&#xff0c;那么金融人有哪些途径查数据呢&#xff1f; 国内&#xff1a; 1. 国家统计局 这个应该是无论什么行业都使用最频繁的网站&#xff0c;每个月都会固定发上个月资产投资数据 、工业增加值和利润数据等常规数据&#xff0c;其他数据也会…

日常BUG—— maven编译报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 一个maven项目在由于在代码中书写了如下代码&#xff1a; public static ConcurrentMap<…

若依如何使用(基本环境的配置)

本文章转载于公众号&#xff1a;王清江唷,仅用于学习和讨论&#xff0c;如有侵权请联系 QQ交流群&#xff1a;298405437 本人QQ&#xff1a;4206359 具体视频地址:8 跑后端_哔哩哔哩_bilibili 1、Ruoyi-Vue是什么&#xff1f; 借用官网原话来解释&#xff1a; 一直想做一款…

28.Netty源码之缓存一致性协议

Mpsc Queue 基础知识 Mpsc 的全称是 Multi Producer Single Consumer&#xff0c;多生产者单消费者。Mpsc Queue 可以保证多个生产者同时访问队列是线程安全的&#xff0c;而且同一时刻只允许一个消费者从队列中读取数据。 Netty Reactor 线程中任务队列 taskQueue 必须满足多个…

【input】关于input 元素的type类型及相关作用

传统类型&#xff1a; text&#xff1a;用于输入单行文本。 <input type"text" name"username">password&#xff1a;用于输入密码&#xff0c;输入的内容会被隐藏。 <input type"password" name"password">checkbox&a…

计算机网络 网络层 IPv4地址

A类地址第一位固定0 B类10 其下同理

matlab使用教程(13)—稀疏矩阵创建和使用

使用稀疏矩阵存储包含众多零值元素的数据&#xff0c;可以节省大量内存并加快该数据的处理速度。sparse 是一种属性&#xff0c;可以将该属性分配给由 double 或 logical 元素组成的任何二维 MATLAB 矩阵。通过 sparse 属性&#xff0c;MATLAB 可以&#xff1a; • 仅存储矩…

Vector - CAPL - 诊断模块函数(流控制帧续)

目录 CanTpGetFirstSequenceNumber & CanTpSetFirstSequenceNumber 代码示例 CanTpIsUseFlowControlSTmin & CanTpIsUseFlowControlSTmin & CanTpUseFlowControlSTmin CanTpIsUseFlowControlFrames & CanTpUseFlowControlFrames 代码示例 CanTpSetFlowC…

网神 SecGate 3600 防火墙任意文件上传漏洞

网神 SecGate 3600 防火墙任意文件上传漏洞 一、 产品简介二、 漏洞概述三、 影响范围四、 复现环境五、 漏洞复现PoC上传哥斯拉马子小龙POC检测: 六、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具…

【网络编程·网络层】IP协议

目录 一、IP协议的概念 二、IP协议的报头 1、四位首部长度 2、16位总长度&#xff08;解包&#xff09; 3、8位协议&#xff08;分用&#xff09; 4、16位首部校验和 5、8位生存时间 6、32位源IP和32位目的IP 7、4位版本/8位服务类型 8、16位标识 9、3位标志 10、1…

聊一下互联网开源变现

(点击即可收听) 互联网开源变现其实是指通过开源软件或者开放源代码的方式&#xff0c;实现收益或盈利。这种方式越来越被广泛应用于互联网行业 在互联网开源变现的模式中&#xff0c;最常见的方式是通过捐款、广告、付费支持或者授权等方式获利。 例如&#xff0c;有些开源软件…

SQL | 排序检索的数据

3-排序检索的数据 使用order by语句排序检索到的数据。 3.1-排序数据 使用SQL语句返回一个数据表的列。 select prod_id from products; --------------------- | prod_name | --------------------- | 8 inch teddy bear | | 12 inch teddy bear | | 18 inch teddy bear |…

springboot开发的悠点装饰后台管理系统java公司装修设计jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 springboot开发的悠点装饰后台管理系统 系统有1权限&…

IPv4编址及子网划分

IPv4编址及子网划分 一、IPv4地址概述1.1、IPv4报文结构1.2、IPv4地址分类1.2.1、A类1.2.2、B类1.2.3、C类1.2.4、D类1.2.5、E类 1.3、私有IP地址1.4、特殊地址 二、子网划分2.1、子网掩码2.2、VLSM 可变长的子网掩码2.3、子网划分2.4、子网划分示例2.4.1、子网划分案例 —— A…

本地以图搜图软件xiSearch-flet

本地以图搜图软件xiSearch-flet 简介 使用 sentence_transformers flet 实现 项目地址&#xff1a;https://github.com/xjhqre/xiSearch-flet 使用说明 1、启动程序&#xff0c;进入设置页面&#xff0c;设置特征文件保存地址 2、进入特征提取页面&#xff0c;输入要提取…

7个顶级开源数据集来训练自然语言处理(NLP)和文本模型

推荐&#xff1a;使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 NLP现在是一个令人兴奋的领域&#xff0c;特别是在像AutoNLP这样的用例中&#xff0c;但很难掌握。开始使用NLP的主要问题是缺乏适当的指导和该领域的过度广度。很容易迷失在各种论文和代码中&#xff…

日常BUG——SpringBoot模糊映射

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 SpringBoot在启动时报出如下错误&#xff1a; Caused by: java.lang.IllegalStateExceptio…

如何预防ssl中间人攻击?

当我们连上公共WiFi打开网页或邮箱时&#xff0c;殊不知此时可能有人正在监视着我们的各种网络活动。打开账户网页那一瞬间&#xff0c;不法分子可能已经盗取了我们的银行凭证、家庭住址、电子邮件和联系人信息&#xff0c;而这一切我们却毫不知情。这是一种网络上常见的“中间…

集合数据类型

非数字型 列表[]&#xff08;其他语言叫数组&#xff09; 注意点&#xff1a;第一个成员的索引编号为0&#xff0c;不能访问不存在的索引编号 # list是列表变量名&#xff0c;列表中有三个成员 list[刘备,曹操,关羽] print(list[0]) print(list[1]) print(list[2]) print(li…