在JAVA中对数组[K,q,a,F,j,A,f]排序,要求排序结果为:[A,a,F,f,K,q].

解决方案 »

  1.   

    前几天正好有人问了个类似的题目。这是我写代码。不过我排序是用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);
    }
    }
    }/*这个类是封装了一个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;
    }
    }}
      

  2.   


    package test;/**
     * @author - yy
     * @time   - Dec 2, 2008 10:24:15 AM
     */
    public class Sort {
      /**
       * 排序,采用最简单的冒泡排序
       * @param array
       * @return
       */
      private char[] doSort(char[] array) {
        char ch;
        for (int i = 0; i < array.length; ++i) {
          for (int j = 0; j < array.length - i - 1; ++j) {
            if (this.compare(array[j], array[j + 1]) > 0) {
              ch = array[j];
              array[j] = array[j + 1];
              array[j + 1] = ch;
            }
          }
        }
        return array;
      }
      /**
       * 比较 a 和 b[忽略大小写,同时同一个大小写字母,大写的小于小写的]
       * 
       * @param a
       * @param b
       * @return
       */
      private int compare(char a, char b) { 
        char aa = (char) (a | 32);
        char bb = (char) (b | 32);
        if (aa == bb) {
          return a < b ? -1 : 1;
        } else if (aa < bb) {
          return -1;
        } else {
          return 1;
        }
      }
      
      public static void main(String[] args) {
        char[] array = new char[] { 'K', 'q', 'a', 'F', 'j', 'A', 'f' };
        new Sort().doSort(array);
        System.out.println(array);//输出: AaFfjKq
      }
    }
      

  3.   

    import java.util.Arrays;public class CharacterSort {

    //在JAVA中对数组[K,q,a,F,j,A,f]排序,要求排序结果为:[A,a,F,f,K,q].
    public static void main(String...args) {
    char[] cstr = {'A','a','F','f','K','q'};
    for(int i = 0 ;i<cstr.length; i++) {
    cstr[i] = Character.toLowerCase(cstr[i]);
    }
    Arrays.sort(cstr);
    for(int i = 1 ;i<cstr.length; i++) {
    if(cstr[i] == cstr[i-1]) {
    cstr[i-1] = Character.toUpperCase(cstr[i-1]);
    }
    }
    System.out.println(Arrays.toString(cstr));
    }
    }
    这个是可以满足需求的。。