序号字符串数组排序问题

字符串数组,单个字符串长度不定,
数字间以-分隔

1-3-1
1
2-3-2
10-2
3-3-3-3-3-3
1-1-1
4-1-2
16

排序后:

1
1-1-1
1-3
2-3-2
3-3-3-3-3-3
4-1-2
10-2
16

求思想

C语言自带函数strcmp(s1,s2)
  说明:
  当s1   当s1=s2时,返回值=0
  当s1>s2时,返回值>0
两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
  "A"<"B" "a">"A" "computer">"compare"

那你自己写个比较函数,把每个数字存放到数组中,然后比较

看了输出后的结果…其实这个只用一步就能做到…在Java中…字符串发现比较规则是…先比较第一个字符…再比较第二字符…
楼主可以把字符串放进一个字符串数组,然后冒泡排序,用大于号小于号比较即可。排好序输出即可

我回来又想想,想了个方法,不想写代码了,就说说思想,我用java,先用正则匹配每个字符串中中划线的个数,然后再把所有的字符串都补齐,补成相同位数,然后把中划线全部替换掉,把去掉中划线后的字符串数组变成long类型的数组,用Arrays.sort升序排列下,输出,就是楼主要的答案。整体思想,就是把第一位变成高位,后面次之,最后变成数字数值排序。,

public static void main(String[] args) {
String[] ss = {
"1-3-1",
"2-3-2",
"10-2",
"3-3-3-3-3-3",
"1-1-1",
"4-1-2",
"16",
"1"
};
int maxlenIndex = 0;
int maxlen = 0;
int len = ss.length;
for(int i=0;i int cur = ss[i].length();
maxlen = maxlen>cur ? maxlen : cur;
if(maxlen==cur){
maxlenIndex = i;
}
}
// System.out.println(maxlenIndex);
int ccl = ss[maxlenIndex].split("-").length;
//System.out.println(ccl);
long[] bb = new long[len];
for(int i = 0; i < len; i++){
String[] aa = ss[i].split("-");
int aal = aa.length;
String b = "";
for(int j=0;j if(j b+=aa[j];
}else{
b+="0";
}
}
bb[i] = Long.parseLong(b);
}
for(int i=0;i for(int j=0;j if(bb[j]>bb[j+1]){
long xy = bb[j];
bb[j] = bb[j+1];
bb[j+1] = xy;

              String s = ss[j];
              ss[j] = ss[j+1];
              ss[j+1] =  s;
          }
      }
  }
  for(int i=0;i<len;i++){
      System.out.println(ss[i]);
  }
  for(int i=0;i<len;i++){
      System.out.println(bb[i]);
  }

}
呃,好吧,搞定碎觉。。至于优化什么的,楼主来搞吧。