题目:
描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串
输入:
9
cap
to
cat
card
two
too
up
boat
boot
输出:
boat
boot
cap
card
cat
to
too
two
up
解答:
牛客网。很多java 实例代码都是直接启用动态数组存储,然后调用Java库中的排序算法直接排序。这种做法耗时短,内存小。我很菜,智能自己写。呜呜呜
package com.chaoxi.java1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
/**
* @author chaoxi
* @create 2021-07-25 9:24
*/
public class Huawei11 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int numLine = sc.nextInt();
ArrayList<String> strings = new ArrayList<>();
for (int i = 0; i < numLine; i++) {
String vacabulary = sc.next();
strings.add(vacabulary);
}
for (int i = strings.size()-1; i >0 ; i--) {
for (int j = 0; j <i ; j++) {
int num = compareString(strings.get(j),strings.get(j+1));
switch (num){
case 1:
String temp = strings.get(j);
strings.set(j,strings.get(j+1));
strings.set(j+1,temp);
break;
case 0:
break;
case -1:
break;
}
}
}
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static int compareString(String str1,String str2){
//比较有可能不等长的字符串等长的部分
for (int i = 0,j=0; i <str1.length()&&j<str2.length() ; i++,j++) {
if(str1.charAt(i)>str2.charAt(i)){
return 1; //str1排在后面
}else if(str1.charAt(i)<str2.charAt(i)){
return -1; //str1排在前面
}else if(str1.charAt(i)==str2.charAt(i)){
continue;
}
}
if(str1.length()==str2.length()){
return 0; //相同
}else if(str1.length()>str2.length()){
return 1; //排在后面
}else {
return -1;
}
}
}