ACM详解(5)——排序

有些ACM题需要使用一些基本的数据结构,下面首先介绍与排序相关的内容。
1、基本排序
Problem Description
These days, I am thinking about a question, how can I get a problem as easy as A+B? It is fairly difficulty to do such a thing. Of course, I got it after many waking nights.
Give you some integers, your task is to sort these number ascending (升序).
You should know how easy the problem is now!
Good luck!
Input
Input contains multiple test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contains an integer N (1<=N<=1000 the number of integers to be sorted) and then N integers follow in the same line.
It is guarantied that all integers are in the range of 32-int.
Output
For each case, print the sorting result, and one line one case.
Sample Input
2
3 2 1 3
9 1 4 7 2 5 8 3 6 9
Sample Output
1 2 3
1 2 3 4 5 6 7 8 9
翻译:对给定的数字序列进行排序。使用数据结构的基本排序算法即可。可以使用各种排序算法实现。另外在Java中提供了排序方法,可以使用Arrays.sort方法,参考下面的代码:
Arrays.sort(a);
其中a是需要排序的数组。
下面给出了冒泡排序的代码供参考:
/*
* 冒泡排序
*/
public static int[] sort(int[] a){
// Arrays.sort(a);
for(int i=0;i<a.length-1;i++){
for(int j=a.length-1;j>i;j--){
if(a[j]<a[j-1]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
return a;
}
2、DNA Sorting
Description
One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted).
You are responsible for cataloguing a sequence of DNA strings (sequences containing only the four letters A, C, G, and T). However, you want to catalog them, not in alphabetical order, but rather in order of ``sortedness'', from ``most sorted'' to ``least sorted''. All the strings are of the same length.
Input
The first line contains two integers: a positive integer n (0 < n <= 50) giving the length of the strings; and a positive integer m (0 < m <= 100) giving the number of strings. These are followed by m lines, each containing a string of length n.
Output
Output the list of input strings, arranged from ``most sorted'' to ``least sorted''. Since two strings can be equally sorted, then output them according to the orginal order.
Sample Input
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT
Sample Output
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA
翻译:对于一个序列的无序性可以使用相互之间无序的元素组的个数表示,例如字母序列DAABEC的无序性是5,D大于后面的AABC,E大于后面的C。而AACEDGG的无序性是1,因为只有E和D之间的顺序是乱的。
题目要求:对于给定的多个字符串(长度相同,由A, C, G和T组成),从最有序到最无序进行排列。
解题思路:计算每个字符串的无序性,然后进行排序即可。参考下面的代码:
/*
* DNA sorting
*/
public static void test3(String[] dnas){
Map invertions = new HashMap();
// 计算每个字符串的乱序数量
for(int i=0;i<dnas.length;i++){
invertions.put(dnas[i], count(dnas[i]));
}
// 排序
for(int i=0;i<dnas.length-1;i++){
for(int j=dnas.length-1;j>i;j--){
if((Integer)(invertions.get(dnas[j]))<(Integer)(invertions.get(dnas[j-1]))){
String temp = dnas[j];
dnas[j] = dnas[j-1];
dnas[j-1] = temp;
}
}
}
// 输出
for(String temp:dnas){
System.out.println(temp+invertions.get(temp));
}
}
// 计算无序性
public static int count(String dna){
int sum=0;
for(int i=0;i<dna.length()-1;i++){
char temp = dna.charAt(i);
for(int j=i+1;j<dna.length();j++){
if(temp>dna.charAt(j))
sum++;
}
}
return sum;
}
上面计算无序性的代码是通过遍历字符串中的每个元素,然后判断后续的每个字符和它之间是否有序,需要遍历两次。如果字符串不是很长,这种算法还可以接受。如果字符串很长,计算将很耗时。下面的方法进行了改进。
/*
* 计算无序性(改进算法)
*/
publicstaticint count2(String dna){
int count[] = newint[4];
Arrays.fill(count,0);
int sum=0;
for(int i=dna.length()-1;i>=0;i--){
char temp = dna.charAt(i);
switch(temp){
case'A':
count[0]++;
break;
case'C':
count[1]++;
sum = sum+count[0]; // 加上C后面的A的个数
break;
case'G':
count[2]++;
sum = sum+count[0]+count[1]; // 加上G后面的A和C的数量
break;
case'T':
count[3]++;
sum = sum+count[0]+count[1]+count[2]; // 加上G后面的A、C和G的数量
break;
}
}
return sum;
}
另外在代码中,对序列进行排序是自己编写的排序算法。也可以使用系统提供的排序功能,需要编写一个类,参考代码如下:
class DNA implements Comparable{
String content;
int unsortness;
DNA(String content,int unsortness){
this.content = content;
this.unsortness = unsortness;
}
@Override
public int compareTo(Object o) {
return unsortness-((DNA)o).unsortness;
}
}
修改后的代码如下:
/*
* DNA sorting
*/
publicstaticvoid test3(String[] dnas){
DNA newDnas[] = new DNA[dnas.length];
for(int i=0;i<dnas.length;i++){
newDnas[i] = new DNA(dnas[i],count(dnas[i]));
}
Arrays.sort(newDnas); // 替换了原来的排序算法
// 输出
for(DNA temp:newDnas){
System.out.println(temp.content+temp.unsortness);
}
}
最多排序到最少排序(分治法) 一.程序题(共1题,100.0分) 1、在线编程题4.求解按“最多排序”到“最少排序”的顺序排列问题 【问题描述】一个序列中的“未排序”的度量是相对于彼此顺序不一致的条目对的数量,例如,在字母序列“DAABEC”中该度量为5,因为D大于其右边的4个字母,E大于其右边的1个字母。该度量称为该序列的逆序数。序列“AACEDGG”只有一个逆序对(E和D),它几乎被排好序了,而序列“ZWQM”有6个逆序对,它是未排序的,恰好是反序。 需要对若干个DNA序列(仅包含4个字母A、C、G和T的字符串)分类,注意是分类而不 阅读详情

相关推荐

华为OD机试真题精讲:最长的顺子(Python/Java/C++多语言实现)

摘要:本文介绍了华为OD机试高频题目"最长的顺子"的解题思路与多语言实现。题目要求在扑克牌数组中,利用万能牌(0)组成最长连续顺子。核心解法包括:1)数据预处理(去重排序);2)滑动窗口算法计算可填补间隙的最长子序列;3)边界条件处理。提供了Python、Java、C++三种实现,均通过时间复杂度O(n log n)和空间复杂度O(n)的优化,满足题目对10^5数据量的性能要求。

bkspiderx的博客 210

C++-PTA 求解按“最多排序”到“最小排序”的顺序排列问题。

PTA 求解按“最多排序”到“最小排序”的顺序排列问题。

害怕也得前进 4302

ACM编程竞赛代码实践详解

国际大学生程序设计竞赛(ACM-ICPC)是一项由国际计算机学会(ACM)主办的全球性算法竞赛。这一章将简要介绍ACM-ICPC的起源、竞赛模式和它在编程界的重要性。字符串处理技巧在编程竞赛中占有重要地位。理解和掌握基础的字符串匹配算法,如朴素匹配和KMP算法,以及字符串处理的高级技巧,如字符串哈希,对于解决复杂问题至关重要。在实际应用中,通过将这些算法与其他算法结合,可以优化问题的解决过程,提升代码的运行效率。在后续的章节中,我们将继续探讨ACM竞赛中其他重要的算法和数据结构的应用。

weixin_42311427的博客 1076

ACM入门基础-排序

写在前面 在入门算法中最为重要的我认为就是排序算法了,将数据排序后将会有许多良好的性质,有序、递增的数据很多时候就是解题的关键,排序算法有很多,常见的有冒泡排序、选择排序、快速排序、归并排序、桶排序…排序算法五花八门,但归根到底的作用就是将无序的数据进行升序或者降序排序,本文通过几道例题来分析各个排序算法的使用场景以及优劣性,但是本文不具体讲述排序算法的实现过程,侧重于对数据的分析从而选择合适的算法。 各大排序时间算法复杂度 数据量:n 数据范围 :m 冒泡、选择排序 时间复杂度O(n2)O(n^{2})

TGX的博客 856

ACM竞赛新手编程训练:杭电11页基础题详解

ACM国际大学生程序设计竞赛(ACM International Collegiate Programming Contest,简称ACM ICPC)是一项由国际计算机学会(ACM)主办的年度性竞赛,旨在激发大学生对算法和程序设计的兴趣,同时也提供了一个展示自己编程能力和团队合作精神的平台。竞赛的历史可以追溯到1970年,当时由美国IBM公司赞助,竞赛的形式和宗旨几乎没有变化,强调的一直是解决复杂问题的能力和编写高效、优雅代码的能力。

weixin_36047538的博客 867

ACM-排序(非常有用)

哈哈,借用了一下我们现在训练的ACM的题,对逍遥参加ACM的同学很有用喔

[ACM] 常用排序算法对比

文章目录字典序十大排序不稳定排序快速排序 - 每次排序让标志位一边都比它大,另一边都比它小缺点:数据已经有序时,时间复杂度退化为 O(n2)O(n^2)O(n2)堆排序 -优点:时间复杂度恒定为 O(nlog⁡n)O(n \log{n})O(nlogn)选择排序 - 每次遍历选出最小的和 first++ 交换希尔排序 - 分为多个子序列进行插入排序稳定排序冒泡排序 - 每次选两个向后依次比较直接插入排序(打牌) - 每次选一个依次和前面比优点:数据几乎有序时时间复杂度达到 O(n)O(n)O(n)归并排序非

qq_43435084的博客 1642

CODESYS EtherCAT通讯断了怎么办?手把手教你用ST语言写状态监测程序(附完整代码)

本文详细解析了CODESYS平台下EtherCAT通讯中断的故障排查与恢复方法,通过ST语言编写状态监测程序实现链路监测、故障隔离和伺服恢复。文章包含完整代码示例,帮助工程师快速诊断EtherCAT网络问题,提升工业自动化设备的运行稳定性。

weixin_30919571的博客 209

ACM排序

ACM比赛中排序方法 1.C的qsort #include 代码: int cmp(const void *p,const void *q) { return *((int *)p)-*((int *)q); } qsort(array,n,sizeof(array[0]),cmp) 六类qsort排序方法: qsort函数很好用,但有时不太会用比如按结构体一级

xuruoxin的专栏 1201

WSL2下用QEMU模拟ARM开发板:从编译uboot到调试全流程(附常见错误解决)

本文详细介绍了在WSL2环境下使用QEMU模拟ARM开发板的完整流程,包括uboot编译、内核调试等关键步骤。通过QEMU模拟vexpress-a9开发板,开发者可以高效搭建嵌入式开发环境,解决常见错误并提升开发效率。

solidity8miner的博客 286

腾讯会议+OBS虚拟摄像头:解决多人屏幕共享的终极指南(附常见问题排查)

本文详细介绍了如何利用OBS虚拟摄像头技术,解决腾讯会议中多人屏幕共享的痛点。通过将OBS作为视频混流中心,可以突破腾讯会议单屏共享的限制,实现多屏幕、多窗口内容的同步展示,并提升演示的专业度。文章涵盖了Windows与Linux双平台的配置步骤、高阶场景搭建以及常见问题(如黑屏、画中画)的排查方法,是团队协作与专业演示的实用指南。

i8j9k0l1的博客 931

ACM[排序题]

题目描述(如有错误,欢迎提出,谢谢,我将继续努力) 今年的ACM世界总决赛快要开始了,需要有一个排名算法来对每支队伍进行现场排名。ACM组委会把这个任务交给了你,相信你一定能很好地完成。 排名规则如下:通过题的数目多的队伍排名靠前,如果有多支队伍过的题的数目相同,则罚时少的队伍排名靠前。 输入 输入的第一行包括一个整数N(1,代表参加比赛的队伍的个数。 接下来的N行每行包括一

bubbleTg的博客 2438

UE5实战:如何用Mesh Shader优化你的游戏场景渲染(附性能对比)

本文深入探讨了在UE5中利用Mesh Shader优化游戏场景渲染的实战方法。通过对比传统渲染管线与GPU Driven Pipeline,详细阐述了Mesh Shader如何通过任务着色器和网格着色器两阶段并行处理,实现更精细的meshlet级剔除,从而显著降低Draw Call和GPU带宽,提升渲染性能。文章附有具体的性能对比数据与代码示例,为开发者优化高复杂度场景提供了有效路径。

sunny的博客 297

拿到acm铜奖可以去大厂吗?

从ACM选手的角度讲: 为什么ACM选手在大家眼里都这么牛逼,原因就是很多ACM选手从中学就开始打比赛,你想想看,在你大学才懂一些简单的数据结构和算法的时候,这些中学生就已经ACM竞赛中畅游了。当然,也不是所有人都这样,比如我就不属于这一批,本人大一才开始准备。 除此之外,ACM的题目都很难,难到什么程度?本人在准备期间刷题刷到一度恶心。ACM竞赛很注重选手的分析和思维两方面的能力,在算法和数据结构这样已经足够复杂的题型下,还要进行大量的变形,所以没有一个高强度的培训是不可能有能力参赛。 所以,经历过AC

九章算法的博客 9424

Ubuntu技巧-Ubuntu远程访问之SSH反向代理

💡大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。

可夫小子的频道 1153

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

【ACM】C++程序设计ACM题库总结

浙江工业大学ACM部分题解析+代码

chenmeng的博客 4407

【车辆仿真】从0开始建立dSPACE RT Simulink工程:CAN通信(RTICANMM方法)

【工程环境信息】:本文基于链接文章搭建SCALEXIO Rack RTPC总线节点,用于与AutoBox通信硬件:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):AutoBox (DS1006)板卡:DS6342软件:本文所使用的DBC链接提示:以下是本篇文章正文内容,下面案例可供参考!!!的部分一定记得配置,其他的按需配置RTICANMM的灵活度非常高,尽可能参考Help文档,理解相应的配置内容官方有RTICANMM的样例工程,在下方路径。

winnizap的博客 2382

ACM部分学习路线

前言:接触ACM也有接近一年的时间了,上一学年学习的知识点也是零零散散,最近打算好好根据论坛上找到的学习路线重新拉一遍,顺便写写博客记录题解和算法笔记,这也算是来优快云发布的第一篇文章了。这篇文章只是一篇总结和链接,各个知识点的链接会根据我的复习(学习)进度陆续更新,希望能完结。 参考文章: ACM算法学习路线、清单 ACM路线 算法竞赛入门到进阶 --- 完整学习路线(含知识点讲解) ACM学习计划 一.基础篇 众所周知,ACM竞赛是三人小队,三个人每个人都会选择不同的方向...

issey的博客 2935

24届数字IC设计/验证秋招总结贴——先看这个

为方便快速进行查找该专栏的内容,将所有内容链接均放在此篇博客中整理不易,欢迎订阅~~

qq_42135020的博客 8416

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

acm新手小白必看系列之(2)——基本排序及cmp函数精讲及例题

acm新手小白必看系列之(2)——排序及cmp函数 sort排序 sort是c++自带函数 复杂度 n*log(n) 包含在头文件 #include的c++标准库里 函数有三个参数 1.要排序的数组的起始地址 2.数组的结束地址 3.第三个参数是排序的方法,可以不写,默认是从小到大 sort(a,a+n) -----默认从小到大排序 比如 int a[ ]={2,7,1,5,0} 我们可以写...

永恒之蓝的博客 2701

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ACM - 归并排序

程序 /** *@descript : 归并排序 *@author : chenzx *@copyright: 2012-12-3(c++) */ #include using namespace std; const int N = 7; void print_arry(int * arry, int len){ for (int i =

chenzhuoxue的专栏 613

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: ACM模拟题详解(4)——递归
下一篇: ACM详解(6)——栈
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值