java - 按子数组的长度对数组进行排序

标签 java sorting comparator adjacency-list

所以我有一个表示邻接列表的二维数组graph:

0:2 1 0
1:0 
2:

以数组格式表示:

[[2,1,0],[0],[]]

我想要做的是按子数组(边缘列表)的长度对特定行(例如graph[0])进行排序。

在上面的示例中,排序后的图表将如下所示:

0:0 1 2
1:0 
2:

[[0,1,2],[0],[]]

由于graph[0].length = 3graph[1].length = 1graph[2].length = 0 >.

我尝试过使用:

Arrays.sort(graph[v], new DegreeComparator(graph));

class DegreeComparator implements Comparator<Integer> {
  int[][] graph;

  public DegreeComparator(int[][] g) {
    graph = g;
  }

  public int compare(Integer c1, Integer c2) {
    return Integer.compare(graph[c1].length, graph[c2].length);
  }
}

但是排序方法不接受这种格式。有人可以解释一下我做错了什么吗?

为清楚起见进行编辑:

因为上面的示例使用了数字,所以有点令人困惑,所以我将添加第二种情况:

0: 4 1 2
1: 1 2 3
2: 
3: 4 1
4: 0

[[4,1,2],[1,2,3],[],[4,1],[0]]

会变成(如果所有行都已排序):

0: 1 4 2 // Row 1 has more numbers than row for which has more than row 2
1: 1 3 2
2: 
3: 1 4
4: 0

[[1,4,2],[1,3,2],[],[1,4],[0]]

但是,我一次只需要对一行进行排序!不是全部。

最佳答案

您要求使用比较器对 int[] 进行排序

将图表类型更改为 Integer[][]

class DegreeComparator implements Comparator<Integer> {
    Integer[][] graph;

    public DegreeComparator(Integer[][] g) {
        graph = g;
    }

    public int compare(Integer c1, Integer c2) {
        return graph[c2].length - graph[c1].length;
    }
}

关于java - 按子数组的长度对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26397963/

相关文章:

java - 无法读取架构文档 'http://www.springframework.org/schema/beans/spring- beans-4.0.xsd'?

java - 从 jlist 中选择并使用复选框更新 jtable

sorting - 如何在 Spark DataFrame 上应用部分排序?

java - 如何将实现特定接口(interface)的任何类作为参数传递并使用其方法?

java - 正则表达式的测试用例失败

java - this.getClass().getResource().openStream ("file.xls") 返回 NullPointerException (MAVEN 项目)

java - 插入排序,比较次数

algorithm - 为什么插入排序的最佳情况是 O(n) 而不是 O(n^2)?

Java TreeMap 自定义比较器奇怪的行为

java - 如何通过比较值对 HashMap 的条目进行排序,其中每个值都是一个 int[]?