2012-10-13 63 views
0

请问有没有办法如何在java中按以下方式排序多维数组?在Java中排序多维数组

允许有这样的阵列结构,

int graph[][] = new int[edges][3]; 

,每一个边缘将具有两个坐标和其重量。我需要根据每条边的重量对整个阵列进行排序。 仅供参考,我需要它来寻找生成树。由于

+0

So..I认为Java默认数组排序不能做that..But我不想实现的自己的版本mergesort(它的速度很快),这对我来说是相当耗时的。 – simekadam

+2

最近我学到了一个新词:Object Denial(参见http://stackoverflow.com/questions/3725703/how-to-store-more-高于一个串入-A-MAP/3725728#3725728)。如果您发现使用您选择的表示方式很难或很乏味,它可能并不适合您的任务... –

+0

@Anders Rostgaard Bystrup,因为我需要尽可能快地做到这一点我不能将每条边作为单独的实例我想这样做,但它可能会失败的测试(它的家庭assigment从高级算法类)..我们的老师说,我们应该避免使用对象... – simekadam

回答

2

您可以使用这样的事情:

Arrays.sort(graph, new Comparator<Integer[]>() { 
      @Override 
      public int compare(final Integer[] entry1, final Integer[] entry2) { 
       // DO SORTING STUFF HERE 
      } }); 
+0

使用比较器+ 1,除了数组类型是'int'而不是'Integer' –

1

我猜您有使用Arrays.sortComparatorarray of array问题。它的作用与你在正常的数组排序中做的相似,但有一点变化。

这就是你如何做到这一点在你的情况。你需要一个ComparatorInteger[]阵列: -

Integer graph[][] = new Integer[2][3]; 
    graph[0][0] = 2; 
    graph[0][1] = 4; 
    graph[0][2] = 3; 

    graph[1][0] = 0; 
    graph[1][1] = 1; 
    graph[1][2] = 2; 


    Arrays.sort(graph, new Comparator<Integer[]>() { 
     @Override 
     public int compare(Integer[] o1, Integer[] o2) { 

      return o1[2] - o2[2]; 
     } 
    }); 


    for (Integer[] outerArr: graph) { 
     for (Integer val: outerArr) { 
      System.out.print(val + " "); 
     } 
     System.out.println(); 
    } 

打印: -

0 1 2 
2 4 3