题目描述
对N个长度最长可达到1000的数进行排序。
输入描述:
输入第一行为一个整数N,(1<=N<=100)。
接下来的N行每行有一个数,数的长度范围为1<=len<=1000。
每个数都是一个正数,并且保证不包含前缀零。
输出描述:
可能有多组测试数据,对于每组数据,将给出的N个数从小到大进行排序,输出排序后的结果,每个数占一行。
示例1
输入
复制
3
11111111111111111111111111111
2222222222222222222222222222222222
33333333
输出
复制
33333333
11111111111111111111111111111
2222222222222222222222222222222222
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=br.readLine()) != null) {
int n = Integer.parseInt(str);
ArrayList<BigInteger> list = new ArrayList<>();
for(int i = 0; i < n; i++) {
list.add(new BigInteger(br.readLine()));
}
Collections.sort(list);
for(int i = 0; i < n; i++)
System.out.println(list.get(i));
}
} catch(IOException e) {
e.printStackTrace();
}
}
}
Hand line and fast row
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.* ;
public class Main
{
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=br.readLine()) != null) {
int n = Integer.parseInt(str);
String[] data = new String[n];
for(int i = 0; i < n; i++) {
data[i] = br.readLine();
}
sort(data, 0, n-1);
for(int i = 0; i < n; i++)
System.out.println(data[i]);
}
} catch(IOException e) {
e.printStackTrace();
}
}
public static int compare(String a, String b) {
if(a.length() > b.length()) return 1;
else if(a.length() < b.length()) return -1;
else return a.compareTo(b);
}
//快排模板
public static void sort(String[] data, int l, int r) {
if(l < r) {
int i = l;
int j = r;
String x = data[i];
while(i < j) {
while(i < j&&compare(data[j], x) >= 0) j--;
if(i < j) data[i++] = data[j];
while(i < j&&compare(data[i], x) < 0) i++;
if(i < j) data[j--] = data[i];
}
data[i] = x;
sort(data, l, i-1);
sort(data, i+1, r);
}
}
}