1

我正在使用以下方法对 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

4

2 回答 2

1

您按第二个值而不是第一个值排序。尝试类似:

Integer numOfKeys1 = int1[0];
Integer numOfKeys2 = int2[0];
于 2013-08-06T12:10:46.880 回答
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;
}
于 2013-08-06T12:19:13.353 回答