2012-10-13 108 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