蓝桥杯——排序

165 阅读1分钟

排序

题目描述

给定一个长度为 NN 的数组 AA,请你先从小到大输出它的每个元素,再从大到小输出它的每个元素。

输入描述

第一行包含一个整数 NN。

第二行包含 NN 个整数 a_1,...,a_na1​,...,an​,表示数组 AA 的元素。

1\leq N\leq 5\times10^5 , -10^9\leq a_i \leq 10^91≤N≤5×105,−109≤ai​≤109。

输出描述

输出共两行,每行包含 NN 个整数,表示答案。

输入输出样例

示例 1

输入

5
1 3 2 6 5

输出

1 2 3 5 6
6 5 3 2 1

运行限制

  • 最大运行时间:3s
  • 最大运行内存: 128M
import java.util.*;



public class Main {
 
  public static void sort(Comparable[] a) {
		int h=1;
//		确定增常量的最大值
		while(h<a.length/2) {
			h=h*2+1;
		}
		while(h>=1) {
			for(int i=h;i<a.length;i++) {
				for(int j=i;j>=h;j-=h) {
					if(greater(a[j-h],a[j])) {
						exch(a,j-h,j);
					}
					else {
						break;
					}
				}
			}
			h=h/2;
		}
	}
	public static boolean greater(Comparable v,Comparable w) {
		return v.compareTo(w)>0;
	}
	public static void exch(Comparable[] a,int i,int j) {
		Comparable tem;
		tem=a[i];
		a[i]=a[j];
		a[j]=tem;
	}

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int n=scan.nextInt();
        Integer arr[]=new Integer[n];
        for(int i=0;i<n;i++){
          arr[i]=scan.nextInt();
        }
        sort(arr);
        for(int i=0;i<arr.length;i++){
          System.out.print(arr[i]+" ");
        }
        System.out.println();
        for(int i=arr.length-1;i>=0;i--){
          System.out.print(arr[i]+" ");
        }
        scan.close();
    }
}