蓝桥杯2021省赛双向排序—JAVA

该博客主要探讨了一种特殊序列的操作问题,给定一个从1到n的序列,小蓝将对其进行m次操作,每次操作可能是降序排列部分元素或升序排列部分元素。文章通过Java代码展示了如何实现这些操作,包括使用Arrays.sort()函数进行部分排序,并在最后输出操作后的序列。博客内容涉及数组操作、排序算法和程序设计技巧。
摘要由CSDN通过智能技术生成
详细题目请[参考链接]

描述:

给定序列 (a1,a2,⋅⋅⋅,an)=(1,2,⋅⋅⋅,n),即 ai=i。

小蓝将对这个序列进行 m 次操作,每次可能是将 a1,a2,⋅⋅⋅,aqi 降序排列,或者将 aqi,aqi+1,⋅⋅⋅,an 升序排列。

请求出操作完成后的序列。

输入格式
输入的第一行包含两个整数 n,m,分别表示序列的长度和操作次数。

接下来 m 行描述对序列的操作,其中第 i 行包含两个整数 pi,qi 表示操作类型和参数。当 pi=0 时,表示将 a1,a2,⋅⋅⋅,aqi 降序排列;当 pi=1 时,表示将 aqi,aqi+1,⋅⋅⋅,an 升序排列。

输出格式
输出一行,包含 n 个整数,相邻的整数之间使用一个空格分隔,表示操作完成后的序列。

分析:

import java.util.Arrays;
import java.util.Scanner;

public class _30_双向排序{
public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();  //表示序列的长度
        int m=sc.nextInt();	 //表示操作次数
        int a[]=new int[n];   //创建一个数组,用于存储数据

        //给数组赋值,实现从a1————an
        for(int i=0;i<n;i++){
            a[i]=i+1;
        }

        //m次操作
        for(int i=0;i<m;i++){
            int pi=sc.nextInt();  //操作类型
            int qi=sc.nextInt();  //参数
            if(pi==0){
                Arrays.sort(a,0,qi);   //知识点如下

                for(int x=0,y=qi-1;x<y;x++,y--){
                    int temp=a[x];
                    a[x]=a[y];
                    a[y]=temp;
                }  //通过for语句,进行数组内数据的大小排序,按降序

            }else if(pi==1){
                Arrays.sort(a,qi-1,n);   //知识点如下
            }
        }
        //输出数组
        for(int a1:a){  //a1获取的是数组a中的每一个元素的值,而不是数组的下标
            System.out.print(a1+" ");
        }
    }
}

Array.sort()用法

1.Arrays.sort(int[] a);

这种形式是对一个数组的所有元素进行排序,并且是按从小到大的顺序。

2.Arrays.sort(int[] a, int fromIndex, int toIndex)

这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序哦!

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值