我正在使用以下方法对2D整数数组进行排序。但是排序似乎存在一些问题。有人可以帮忙。
private static Integer[][] sort(Integer[][] bs) {
Arrays.sort(bs, new Comparator<Integer[]>() {
@Override
public int compare(Integer[] int1, Integer[] int2) {
Integer numOfKeys1 = int1[1];
Integer numOfKeys2 = int2[1];
return numOfKeys1.compareTo(numOfKeys2);
}
});
return bs;
}
输入数组:
480 615
1320 1395
1020 1140
420 585
540 780
960 1065
720 810
690 750
输出:
420 585
480 615
690 750
540 780 - 未分类
720 810
960 1065
1020 1140
1320 1395
答案 0 :(得分:1)
您按第二个值排序而不是第一个值。 尝试类似:
Integer numOfKeys1 = int1[0];
Integer numOfKeys2 = int2[0];
答案 1 :(得分:1)
它实际上是已排序的,但键是数组中的第二条记录。要按第一个节点对其进行排序,您需要将比较器更改为
public int compare(Integer[] int1, Integer[] int2) {
Integer numOfKeys1 = int1[0];
Integer numOfKeys2 = int2[0];
return numOfKeys1.compareTo(numOfKeys2);
}
或者更好地编写一个按字典顺序排序的比较器
public int compare(Integer[] int1, Integer[] int2) {
int minlen = Math.min(int1.length, int2.length);
for (int i = 0; i < minlen; ++i) {
int cmp = int1[i].compareTo(int2[i]);
if (cmp != 0) {
return cmp;
}
}
// so far the arrays are same, the shorter goes first
return int1.length - int2.length;
}