目标:cCBbaA
结果:AaBbCc当然我是做出来了。不过是笨法子。就是分四种情况1.b a 98 97
2.B a 66 97
3.B A 66 65
4.b A 98 65然后比大小交换。有更好的算法么?

解决方案 »

  1.   


    我是转化成CHAR再比较的。我的意思是,有比我的解决方法更好的方法么。
      

  2.   

     Arrays.sort(Character数组,new Comparator<Character>(){
      public int compare(Character arg0, Character arg1) {
          //自己写比较方法
        }
      });
      

  3.   

        public static void sort(char[] data)
        {
            char t = 0;
            for (int i = 1; i < data.length; i++)
            {
                for (int j = i; (j > 0) && comp(data[j], data[j - 1]); j--)
                {
                    t = data[j];
                    data[j] = data[j - 1];
                    data[j - 1] = t;
                }
            }
        }    static boolean comp(char ch1, char ch2)
        {
            return (0 >= (("" + ch1).compareToIgnoreCase("" + ch2))) ? true : false;
        }    public static void main(String[] args)
        {
            String t = "cCBbaA";
            char[] chars = t.toCharArray();
            sort(chars);
            System.out.println(new String(chars));
        }
      

  4.   

    java 语言自己写冒泡就..........public static void main(String[] args) {
    String str = "ADKskhasSKNX";
    byte[] b = str.getBytes();
    Arrays.sort(b);
    String s = new String(b);
    StringBuffer sb = new StringBuffer(s);
    System.out.println(sb);
    sb = sb.reverse();
    System.out.println(sb);
    }两次输出一次升排序,一次降排序
      

  5.   

    public static String doWork(String s){
    int[] arr = new int[s.length()];
    for(int i = 0; i<s.length(); i++){
    char c = s.charAt(i);
    if(c <= 'z' && c >= 'a'){
    arr[i] =  ((int)c-32)*2+1; 
    }else {
    arr[i] = (int)c*2;
    }
    }
    Arrays.sort(arr);
    StringBuffer sb = new StringBuffer();
    for(int i = 0; i<s.length(); i++){
    if(arr[i]%2 == 1){
    arr[i] = (arr[i]-1)/2+32;
    sb.append((char)arr[i]);
    }else{
    arr[i] = arr[i]/2;
    sb.append((char)arr[i]);
    }
    }

    System.out.println(Arrays.toString(arr));
    return sb.toString();
    }长了点 思想是根据传进来的字符串,把他转化为数组,转化的规则为 大写的*2 (小写的-32)*2+1;
    在进行排序;
    然后再转回来;
    再转为字符串
      

  6.   

    public static void main(String[] args) {
         String str = "cCBbaA";
         List<String> myList = new ArrayList<String>();
         char[] chars = str.toCharArray();
         for (char c:chars)
         myList.add(String.valueOf(c));
         Collections.sort(myList, String.CASE_INSENSITIVE_ORDER);
         Collections.sort(myList,new Comparator<String>(){
           public int compare(String str1, String str2) {
           if (str1.toLowerCase().equals(str2.toLowerCase()))
           return str1.compareTo(str2);
           else
           return 0;
           }
           });   
         System.out.println(myList);
        }