如 34,23,5 应该排列为 5,34,23
算法为: 先比较第一位数字 数字大的在前,如果相同按此规则比较下一位
当第一次发现有数字位数不够时,则比较较长数字的第一位和当前位,若第一位大则短数字在前,否则反之
以下是代码
public static String test(int[] values){
if(values.length == 1){
return ""+values[0];
}
String[] strValues = new String[values.length];
int maxLength = 0;
for(int i=0;i < values.length;i++){
strvalues[i]=String.valueOf(values[i]);
if(strvalues[i].length() > maxLength){
maxLength = strValues[i].length();
}
}
for(int i=0;i < maxlength;i++){
sort(strvalues,i);
}
stringbuilder sb= new stringbuilder();
for(string v : strvalues){
sb.append(v).append(" ");
}
return sb.tostring();
}
public static void sort(string[] strvalues,int index){
while(true){
boolean change=false;
for(int i=0;i < strValues.length-1;i++){
string first=strValues[i];
second=strValues[i+1];
if(first.length() >= index+1 && second.length() >= index+1){
// 数值大的直接去前边
if(first.substring(0, index).equals(second.substring(0,index)) && Integer.valueOf(first.substring(index,index+1)) < Integer.valueOf(second.substring(index,index+1))){
strValues[i] = second;
strValues[i+1] = first;
change = true;
}else if(first.substring(0, index).equals(second.substring(0,index)) && Integer.valueOf(first.substring(index,index+1)) == Integer.valueOf(second.substring(index,index+1))){
if(first.length()>second.length()){
strValues[i] = second;
strValues[i+1] = first;
change = true;
}
}
}else if(first.length() ==index && second.length() >index){
if(second.startsWith(first)){
if(Integer.valueOf(second.substring(0,1)) < Integer.valueOf(second.substring(index,index+1))){
strValues[i] = second;
strValues[i+1] = first;
change = true;
}
}
}
}
if(!change){
break;
}
}
}