这里我没有专注于排序算法,而是写了一个MyString类,实现了comparable的接口,然后用Arrays的sort方法来实现排序。我觉得这道题的难度在于如果比较两个。因为大小写的关系,实现起来有点复杂。
这是类一
import java.util.Arrays;/*1.对字符串进行排序,用任意一种编程语言来实现,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“X man”,“little”,“During”,“day”能够排序成 “Ad”,"aC",“Bc”,“During”,“day”,“Hello”,“little”,“Hello”,也就是说,在排序的过程并不是传统的按照字符串排序,在排序中还需要将小写字母一并排序,也就是说a字符串要在B或b之前。*/public class LetterSort { public static void main(String[] args) { // TODO Auto-generated method stub String[] str = { "dad", "bOod", "bada","Admin","Good","aete","cc","Ko","Beta","Could"}; MyString[] strcompare = new MyString[str.length]; for(int i = 0;i<str.length;i++){ strcompare[i] = new MyString(str[i]); } Arrays.sort(strcompare); for(MyString string:strcompare){ System.out.println(string); } }}
实现接口的MyString
/*这个类是封装了一个String。实现Comparable接口。这样使得可以用Arrays的sort方法进行排序*/public class MyString implements Comparable<MyString> { private String string; public void setString(String string) { this.string = string; } public String getString() { return string; } //构造方法 public MyString(String string){ this.string = string; } //比较 public int compareTo(MyString other) { // TODO Auto-generated method stub char[] thisarr = this.string.toCharArray(); //存储被包装 字符串的字符数组 char[] otherarr = other.getString().toCharArray(); //存储要比较的字符串的字符数组 /*取得循环次数,为两个字符串的长度的最小值*/ int iterate = thisarr.length<otherarr.length?thisarr.length:otherarr.length; boolean mlowercase; //记录被封装的字符串循环到的字符是否为小写 boolean olowercase; //记录要比较的字符串循环到的字符是否为小写 char thisletter; //记录被封装的字符串循环到的字符 char otherletter; //记录要比较的字符串循环到的字符 /*字符串相等,则返回0*/ if(this.getString().equals(other.getString())){ return 0; } /*循环字符串,做比较*/ for(int i=0;i<iterate;i++){ mlowercase = this.isLowercase(thisarr[i]); olowercase = this.isLowercase(otherarr[i]); /*把比较字符变成大写*/ thisletter = mlowercase?(char)(thisarr[i]-32):thisarr[i]; otherletter = olowercase?(char)(otherarr[i]-32):otherarr[i]; /*比较*/ if(thisletter!=otherletter){ //比较字母大小,不相等,则取差值,字母小的在前面 return (thisletter-otherletter); }else{ //字母的大写形式相同 if(mlowercase == olowercase){ //此位置大小写形式相同,判断下一个字符; continue; }else if(mlowercase){ //被封装的字符为小写,则返回负值 return 32; }else if(olowercase){ //比较字符串的字符为小写,则返回正直 return -32; } } } /*如果循环好之后还分不出大小,则小的排在后面*/ return (thisarr.length<otherarr.length?-1:1); } @Override public String toString() { // TODO Auto-generated method stub return string; } //通过码值,来判断字符是否为小写字母 private boolean isLowercase(char ch){ if((int)ch >=97 && (int)ch<=122){ return true; }else{ return false; } }}