2013-11-26 348 views
1

明天我有一個測試,我們根據問題編寫代碼。我需要解釋如何按升序排列二維數組。我可以做一維數組,但我不確定相同的代碼是否適用於2D。你能解釋一下如何以你自己的方式實現2D數組,我不希望你認爲這是作業,我只需要知道如何在明天進行測試。由於如何按升序排列二維數組? Java

for (i = 0; i < a.length - 1; i++) { 
for (j = i+1; j < a[0].length; j++) { 
     if (a[i] < a[j]) { 
      int temp = a[i]; 
      a[i] = a[j]; 
      a[j] = temp; 
      System.out.print(temp); 
     } 
} 

}

+2

你能描述一下2個dim陣列的「順序」意味着什麼嗎?是否有一列或多列用於確定已排序的2個暗淡陣列? – NormR

+0

可能是這個幫助http://stackoverflow.com/questions/20931669/sort-a-2d-array-in-c-using-built-in-functionsor-any-other-method – prime

+0

這有一個答案。 http://stackoverflow.com/questions/18705127/how-to-sort-a-2d-array/41853842#41853842 – prime

回答

1

看來你想排序矩陣的每一行。 你可以簡單地在每一行,去和排序使用過的,現成的Java方法給出a是二維數組:

for (i = 0; i < a.length; i++) { 
    Arrays.sort(a[i]); 
} 

反正你的問題不是一清二楚,我和我同@Normr其評論。

0

一種方式向它基本上是執行選擇排序(所以你通過元素迭代中要在其中元素進行排序順序,併爲每個元素你通過搜索表格的其餘部分 - 排除當前元素之前的元素 - 選擇最小元素並將其與當前元素進行交換)。這將是O(n^2),其中n是數組的總大小。

另一種方法是將元素複製到1d數組,使用任何正確的算法對其進行排序,然後將您的有序元素複製到2d數組中的正確位置(以便按照您希望的方式對其進行排序)。有了適當的數據集,這可能是O(n),因爲它需要O(n)進行復制,並且可能需要O(n)進行Count Sort或Bucket Sort(如果它們適合您的設置)。在最壞的情況下,這將是O(nlogn),因爲您可以使用MergeSort,HeapSort,QuickSort或任何基於比較的排序算法。

0

根據你的描述,我認爲你可以解決這個問題。

首先,循環2D數組,並將每個元素放入一個arrayList中。 然後,使用exists方法Collections.sort(List paramList)對arrayList進行排序。

您將在最後得到一個排序列表。

1

將2D陣列製成一個單獨的簡單(1D)陣列(步驟1)。
然後使用Arrays.sort()方法對簡單數組進行排序(STEP 2)。
然後將2D數組的每個空間設置爲跨越(X空間將被更改的座標)的列數乘以2D陣列中每行的空間數。然後添加行號(空間將被更改的Y座標),您將獲得所需簡單字符串的索引(步驟3)。

我的打印方法在底部。

public static void sort2DArray(int[][] arrayName) 
{ 
    int[] simpleArray = new int[(arrayName[0].length)*(arrayName.length)]; 
    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
    { 
     for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
     { 

      simpleArray[arrayName[0].length*r+c] = arrayName[r][c]; //*STEP 1* 
     } 
    } 
    Arrays.sort(simpleArray); //*STEP 2* 

    for(int r = 0; r < arrayName.length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
    { 
     for(int c = 0; c < arrayName[0].length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
     { 
      arrayName[r][c] = (simpleArray[(r * arrayName[0].length) + c ]); //*STEP 3* 
     } 
    } 
} 

public static void print2DArrayAsTable(int[][] arrayName) //METHOD TO PRINT A 2D ARRAY AS A TABLE 
{ 
    for(int c = 0; c < arrayName.length; c++) //CYCLE THROUGH COLUMNS (X VALUES) 
    { 
     for(int r = 0; r < arrayName[0].length; r++) //CYCLE THROUGH ROWS (Y VALUES) 
     { 
      p.o(arrayName[c][r] + " "); //PRINT INDIVIDUAL ARRAY SPACE VALUE 
     } 
     p.l(); 
    } 
}