如这个数组['2-5-1','2-3','2-1','2-2','1','2-5','2-5-2','2-5-3','2-5-4','2-5-5','2-5-6']
如果是1开头就放在最前面   依次类推然后是2 然后是3  ....然后可能是13如果都是以1开头的
在按后面的大笑开始排序
如 1-3,1-6,1-4-3,1-4-2
排序玩之后应该是1-3,1-4-3,1-4-2,1-6
因为1-4-3与1-4-2顺序还是不对
还要排序一次
排序完之后应该是
1-3,1-4-2,1-4-3,1-6

解决方案 »

  1.   

    我想请问 你要用什么语言排序java版本可以?
      

  2.   

    var arr = ['1-3','1-6','1-4-3','1-4-2'];
    arr.sort(function(a,b) {
    if(a.length == b.length) {
    return (parseInt(a.replace(/-/g,''))) > (parseInt(b.replace(/-/g,'')));
    } else {
    return a > b;
    }
    });
    alert(arr);
      

  3.   


    var arr =['2-5-1','2-3','2-1','2-2','1','2-5','2-5-2','2-5-3','2-5-4','2-5-5','2-5-6'];
    arr.sort(function(a,b) {
        if(a.length == b.length) {
            return (parseInt(a.replace(/-/g,''))) > (parseInt(b.replace(/-/g,'')))?1:-1;
        } else {
            return a > b?1:-1;
        }
    });
    alert(arr);
    看下这个对不对了
      

  4.   

    我的肯定对了  调试过了 打印出了结果
    这是结果:
    1
    2-1
    2-2
    2-3
    2-5
    2-5-1
    2-5-2
    2-5-3
    2-5-4
    2-5-5
    2-5-6java代码:public class Test {
    public static void main(String []args){
    try{
    String [] str={"2-5-1","2-3","2-1","2-2","1","2-5","2-5-2","2-5-3","2-5-4","2-5-5","2-5-6"};
    int []ss={0,0,0,0,0,0,0,0,0,0,0};
    for(int i=0;i<str.length;i++){
    String st=str[i];
    String [] s=st.split("-");
    int k=0;
    int total=0;
    for(int j=0;j<s.length;j++){
    k=Integer.parseInt(s[j]);
    if(j==0){
    total=total+k*100;
    }
    if(j==1){
    total=total+k*10;
    }
    if(j==2){
    total=total+k;
    }
    }
    ss[i]=total;

    }

    for(int r=0;r<ss.length;r++){
    for(int t=r;t<ss.length;t++){
    int temp=0;
    if(ss[r]>ss[t]){
    temp=ss[t];
    ss[t]=ss[r];
    ss[r]=temp;
    }
    }
    }
    for(int i=0;i<str.length;i++){
    if(ss[i]%100==0){
    ss[i]=ss[i]/100;
    }
    if(ss[i]%10==0){
    ss[i]=ss[i]/10;
    }
    str[i]=ss[i]+"".trim();
    String s=ss[i]+"".trim();
    if(s.length()==2){
    str[i]=s.substring(0,1)+"-"+s.substring(1,2);
    }else if(s.length()==3){
    str[i]=s.substring(0,1)+"-"+s.substring(1,2)+"-"+s.substring(2,3);
    }

    }
    for(int i=0;i<str.length;i++){
    System.out.println(str[i]);
    }
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    }
      

  5.   

    以上代码直接在eclipse里面执行可以 看见结果
      

  6.   

    好像不用那么麻烦,直接用Array的sort()方法就可以达到要求。
    var arr = ['2-5-1','2-3','2-1','2-2','1','2-5','2-5-2','2-5-3','2-5-4','2-5-5','2-5-6'];
    alert(arr.sort());
      

  7.   

    var arr =['2-5-1','2-3','2-1','2-2','1','2-5','2-5-2','2-5-3','2-5-4','2-5-5','2-5-6'];
    arr.sort(function(a,b) {
        if(a.length == b.length) {
            return (parseInt(a.replace(/-/g,''))) > (parseInt(b.replace(/-/g,'')))?1:-1;
        } else {
            return a > b?1:-1;
        }
    });
    alert(arr);
    看下这个对不对了算法不对:
    if(a.length == b.length) 
    如果是: 12-5 和1-25  岂不相同了else
    如果是:103  12       103 会跑前面去的 var arr =['2-5-1','2-3','2-1','2-2','1',,'103','2-5','2-5-2','2-5-3','2-5-4','2-5-5','2-5-6','12-1','1-21'];
     var arr1 ;
     var arr2 ;
     var s1=s2=0;
    arr.sort(function(a,b) {
        arr1 = a.split('-');
        arr2 = b.split('-');
        
           for(var i=0;i< Math.max(arr1.length,arr1.length);i++)
           {
               s1=parseInt((arr1[i]||0),10); 
               s2=parseInt((arr2[i]||0),10); 
               if(s1>s2)
               {
                    return 1;
               }
               if(s1< s2){
                return -1;
               }
           }
           return 0;
       
    });alert(arr);
      

  8.   

    呵呵 确实疏忽了~~
    替换的时候-替换为0就可以了sort方法是可以的~~~!
      

  9.   

    额,其实有点问题,遇到'1','2-1','12-1'这样的情况时,直接用sort()排序出来的结果达不到楼主的要求,11楼的方法或许可行。
      

  10.   

    12-1 1-21 ==> 1201 1021 那么理所当然1021在前面了。这样的结果应该没问题了var arr = ['1-3','1-6','1-4-3','1-4-2'];
    arr.sort(function(a,b) {
        if(a.length == b.length) {
            return (parseInt(a.replace(/-/g,'0'))) > (parseInt(b.replace(/-/g,'0')));
        } else {
            return a > b;
        }
    });
    alert(arr);