
描述
对于给定的由大小写字母混合构成的 n 个单词,输出按字典序从小到大排序后的结果。
从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符对应的 Ascii 码( A<⋯<Z<a<⋯<z )得出字符串的大小,称为字典序比较。
从字符串的第一个字符开始逐个比较,直到找到第一个不同的位置,通过比较这个位置字符对应的 Ascii 码( A<⋯<Z<a<⋯<z )得出字符串的大小,称为字典序比较。
输入描述:
第一行输入一个整数 n(1≦n≦1000) 代表给定的单词个数。
此后 n 行,每行输入一个长度 1≦length(s)≦100 ,由大小写字母混合构成的字符串 s ,代表一个单词。
此后 n 行,每行输入一个长度 1≦length(s)≦100 ,由大小写字母混合构成的字符串 s ,代表一个单词。
输出描述:
输出 n 行,每行输出一个字符串,代表排序后的结果。第一行输出字典序最小的单词。
解法一(java):
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        List<String> list = new ArrayList<>();
        int a = in.nextInt();
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.next();
            list.add(str);
        }
        int size = list.size();
        for (int i = 0 ; i < size; i++) {
            for (int j = 0 ; j < size - i -1 ; j++) {
                String tmp1 = list.get(j);
                String tmp2 = list.get(j+1);
                if (exchange(tmp1,tmp2)) {
                    list.set(j,tmp2);
                    list.set(j+1,tmp1);
                }
            }
        }
        for (String s : list) {
            System.out.println(s);
        }
    }
    public static boolean exchange(String one,String two) {
        int oneLen = one.length();
        int twoLen = two.length();
        int len = oneLen > twoLen ? twoLen : oneLen;
        for (int i = 0; i < len; i++) {
            int c1 = one.charAt(i);
            int c2 = two.charAt(i);
            if (c1 > c2) {
                return true;
            } else if (c2 > c1) {
                return false;
            }
        }   
        return oneLen > twoLen;
    }
}
思路:先将数据放到一个集合中,然后冒泡排序,交换字符串的值,但是要注意交换的方法,容易出错。
解法二(java)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        in.nextLine(); // 消耗换行符
        List<String> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(in.nextLine());
        }
        Collections.sort(list); // 默认字典序升序
        for (String s : list) {
            System.out.println(s);
        }
    }
}
- 
优先用
Collections.sort(),避免手写冒泡排序。 - 
字典序规则:
String.compareTo()已内置实现,直接调用即可。