实现一个算法对多个字符串进行排序,不能使用现有的类,在排序中,字符串“Bc”,“Ad”,“aC”,“Hello”,“Xman”,“little”,“During”,“day”能够排序成“Ad”,“aC”,“Bc”,“During”,“day”,“Hello”,“little”,“Xman”,也就是说,在排序的过程中并不是传统的按照字符串排序,在排序中海需要将小写字母一并排序,也就是说a字符串要在B和b之前 

解决方案 »

  1.   

    Ad和aC的排序原则是什么呢?
    Ad 在 aC 之前,先比较首字母
      

  2.   

    自己写一个Comparator<String>
      

  3.   

    先排序首字母 如果一样排序第2个以此类推, 用ASCLL码比较吧
      

  4.   

    SortedMap、SortedSet类好像都有自动排序的功能,你去看看api的介绍。
      

  5.   

    用ASC2码比较 都转成INT型 比比就行了 
      

  6.   

    Ad和aC的排序原则是什么呢?
    Ad 在 aC 之前,先比较首字母
    在之后 还比较之后的字母吗?  
    大写的字母排在小写字母之前对吗?
      

  7.   

    package com;public class Test2 {
    public static void main(String[] args) {
    String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
    for(int i =0;i<s.length;i++){
    for(int j=i;j<s.length;j++){
    if(px(s[i].charAt(0),s[j].charAt(0))){
    String aa = "";
    aa = s[i];
    s[i] = s[j];
    s[j] = aa; 
    }
    }
    }
    for(String k: s){
    System.out.println(k);
    }
    }
    private static boolean px(char c1,char c2){
    boolean b = true;
    if(c1>=97){
    c1 -= 32;
    }if(c2>=97){
    c2 -= 32;
    }
    if(c1<=c2){
    b = false;
    }
    return b;
    }
    }
    你看下 吧 我英语次 变量名和方法名 很难认. 呵呵! 包含下!
      

  8.   

    public class Test2 {
    public static void main(String[] args) {
    String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
    for(int i =0;i<s.length;i++){
    for(int j=i;j<s.length;j++){
    if(px(s[i].charAt(0),s[j].charAt(0))){
    String aa = "";
    aa = s[i];
    s[i] = s[j];
    s[j] = aa; 
    }
    }
    }
    for(String k: s){
    System.out.println(k);
    }
    }
    private static boolean px(char c1,char c2){
    boolean b = true;
    if(c1>=97){
    c1 -= 32;
    }if(c2>=97){
    c2 -= 32;
    }
    if(c1==c2&&c1<=c2){
    b = false;
    }
    if(c1<c2){
    b = false;
    }
    return b;
    }
    }
    刚刚那个逻辑有问题 这个好像比那个强点!
      

  9.   

    public class Test {
    public static void main(String[] args) { 
    String[] s = {"Bc","Ad","aC","Hello","Xman","little","During","day"};
    String s1;
    for(int i =0;i<s.length;i++){
    for(int j=i;j<s.length;j++){
    if(s[i].compareToIgnoreCase(s[j])>0){
       s1=s[i];
       s[i]=s[j];
       s[j]=s1;
    }
    }
    }
    String ss;
    for(ss:s){
      System.out.println(ss);
    }
    }
    }
      

  10.   

    public static int compare(String s1, String s2) {
        char[] arr1 = s1.toCharArray(), arr2 = s2.toCharArray();
        int index = 0, len1 = arr1.length, len2 = arr2.length;
        int len = len1 < len2 ? len1 : len2;
        while (index < len) {
            char c1 = arr1[index], c2 = arr2[index];
            char c1_ = (char) (c1 >= 'a' ? c1 - ('a' - 'A') : c1);
            char c2_ = (char) (c2 >= 'a' ? c2 - ('a' - 'A') : c2);
            if (c1_ == c2_) {
                if (c1 != c2)
                    return c1 - c2;
            } else
                return c1_ - c2_;
            index++;
        }
        if (len1 == len2)
            return 0;
        else if (len1 > len2)
            return arr1[len];
        else
            return -arr2[len];
    }public static void sort(String[] src) {
        String temp;
        for (int i = 0; i < src.length - 1; i++) {
            for (int j = 0; j < src.length - i - 1; j++) {
                if (compare(src[j], src[j + 1]) > 0) {
                    temp = src[j];
                    src[j] = src[j + 1];
                    src[j + 1] = temp;
                }
            }
        }
    }public static void main(String[] args) {
        String[] s = { "Bc", "Ad", "aC", "Hello", "Xman", "little", "During",
                "day" };
        System.out.println("Before sort: " + Arrays.toString(s));
        sort(s);
        System.out.println("After sort: " + Arrays.toString(s));
    }
      

  11.   

    public static void sort(String[] src) {
        int[][] arr = new int[src.length][2];
        int count = 0, index = 0;
        arr[0][0] = 0;
        arr[0][1] = src.length - 1;
        while (index <= count) {
            int left = arr[index][0];
            int right = arr[index][1];
            int[] dir = { 0, 1 };
            int i = left, j = right;
            String temp;
            while (i < j) {
                if (compare(src[i], src[j]) > 0) {
                    temp = src[i];
                    src[i] = src[j];
                    src[j] = temp;
                    dir[0] = 1 - dir[0];
                    dir[1] = 1 - dir[1];
                }
                i += dir[0];
                j -= dir[1];
            }
            if (j - left > 1) {
                count++;
                arr[count][0] = left;
                arr[count][1] = j - 1;
            }
            if (right - i > 1) {
                count++;
                arr[count][0] = i + 1;
                arr[count][1] = right;
            }
            index++;
        }
    }
    改一个排序算法……#15的是冒泡,这个是无递归快排……
      

  12.   

    12楼的有问题,之比较了首字母
    String[] s = {"Bc","Ad","aa","AC","Hello","Xman","little","Da","During","dfy"};
    就会出错
      

  13.   

    15楼
    compare(String s1, String s2)中的这段代码不懂,帮忙解释下
    if (len1 == len2)
            return 0;
        else if (len1 > len2)
            return arr1[len];
        else
            return -arr2[len];
    谢了。
      

  14.   

    len是s1、s2中较短者的长度,如果能走到这一步,说明两个字符串的前len个字符完全相同
    所以这一段代码是对s1是s2的子串或s2是s1的子串的情况下做处理
    在这个前提下,如果len1==len2,说明两个字符串的确相同;如果len1<len2,那么s1是s2的子串,s1<s2;如果len1>len2,那么s2是s1的子串,s1>s2
    其实这里我定了默认条件都是英文字符,如果有其他字符可能会有问题