排序
题目描述
给定一个长度为 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();
}
}