Java用compareTo对String数组进行排序

private static void sort_string(String [] str){
int i,j;
String temp;
for(i=0;i<str.length-2;i++){
for(j=str.length-1;j>i;j--){
if(str[j-1].compareTo(str[j])<0)
{
temp = str[j];
str[j] = str[j-1];
str[j-1] = temp;
}
}
}
}

我写的是冒泡排序,但是我将String类型转换成int类型是,排序是正确的。。。
这个是int的排序
private static void sort_int(int[] a){
int i,j;
int temp;
for(i=0;i<a.length-2;i++){
for(j=a.length-1;j>i;j--){
if(a[j]>a[j-1])
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}

请输入一串数字,用","隔开:
13,98,28,34,5,7,3
string:13 28 3 34 5 7 98
int:98 34 28 13 7 5 3
这个是结果

字符串是按字典排序的,
即你这组数据他比较的时候是这样比较的位数不同的都是补齐的。
即 13,98,28,34,50,70,30

望lz采纳,3ks追问

我改了一下if(str[j-1].compareTo(str[j])0)

13,98,28,34,5,7,3
string:98 7 5 34 3 13 28
int:98 34 28 13 7 5 3

结果就这样了。。。就是按你的说13,是在28前面的啊

追答

lz您的冒泡排序写的有问题:
应该如下:你试试
private static void sort_string(String[] str) {
int i, j;
String temp;
for (i = 0; i i; j--) {
if (str[j - 1].compareTo(str[j]) > 0) {
temp = str[j];
str[j] = str[j - 1];
str[j - 1] = temp;
}
}
}
}

LZ如果你是想排序数字的顺序话在比较的时候最好转化成数字类型那样就没问题了
在比较的时候:
if(str[j-1].compareTo(str[j])Integer.valueOf(str[j]))

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
String 的比较是一个一个字符比较,发现有不同的字符时,比较他们的ascii码。所以你这样写是不对的。
解决办法:

if(str[j-1].compareTo(str[j])<0)
变成
if(Integer.valueOf(str[j-1])>Integer.valueOf(str[j]))
即可
第2个回答  2013-10-25
如果你是针对数字型的String进行排序,在比较时,把他们转换成int型在比较就好了
相似回答