2010-11-11 102 views
3

我有一個二維數組,我想根據第一列的內容按降序排序,但是我希望數組保留每一行並移動第二列作爲第一步。把它作爲一個例子;排序2維數組

[2, 5] 
[4, 18] 
[1, 7] 
[9, 3] 

將被分爲:

[9, 3] 
[4, 18] 
[2, 5] 
[1, 7] 

感謝。

+0

我對此很困惑。它看起來像你有一對int的一維數組。這不同於二維數組。 – shoebox639 2010-11-11 19:59:18

+2

這是一個二維數組:)它是一個數組數組。值可以被引用爲arr [0] [1]; – 2010-11-11 20:01:35

+0

我知道2D數組的表現是什麼。然而,他所要求的並不合理。是否有一個x乘2的數組,確實應該是一對數組?編輯:好吧看了一些答案後,它看起來像這只是一個非常糟糕的二維數組(反正)。如果他只有一組對象作爲輸入對,那麼OP會更好。 – shoebox639 2010-11-11 20:05:32

回答

2
int[][] d2 = { 
      {2,5}, 
      {4,18}, 
      {1,7}, 
      {9,3} 
      }; 

java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() { 
    public int compare(int[] a, int[] b) { 
     return b[0] - a[0]; 
    } 
}); 
4

試試這個:

int[][] test = new int[][]{{2,5}, {4,18}, {1,7},{9,3}}; 
    Arrays.sort(test, new Comparator<int[]>() { 
     @Override 
     public int compare(int[] o1, int[] o2) { 
      return o2[0] - o1[0]; 
     } 
    }); 

我沒有測試過這一點,但它應該工作。請注意,您可能想要反轉減法以更改降序。

+0

woops我以爲你的意思是陣列中的第二項。我將索引更改爲0. – 2010-11-11 20:03:34

+1

如果您希望對此使用負整數,請使用'<' and '>'而不是返回差異。否則,差異可能會溢出'int'範圍。 – erickson 2010-11-11 20:08:06

0

我不能專門講java,但算法應該是可翻譯的。重點是在交換時移動該行的兩個元素(或更多)。

INT變種[N] [2] //你的int數組
// [選擇排序方法]
//我要使用冒泡排序
//爲清楚起見,儘管效率低下
int temp [2];
bool stillSorting = true;

{

stillSorting = FALSE;
對(INT X = N; X < 1; x--)
{

如果(VAR [X] [0]>變種[X-1] [0])
{

temp [0] = var [x] [0]; //如果它大於2
temp [1] = var [x] [1]; //考慮使用循環
var [x] [0] = var [x-1] [0];
var [x] [1] = var [x-1] [1];
var [x-1] [0] = temp [0];
var [x-1] [1] = temp [1];
stillSorting = true;
}
}
}
while(stillSorting);

+0

這是哪種編程語言? – 2013-10-08 17:06:40

+0

這只是C++風格的新手僞代碼,因爲那是我當時所熟悉的。 – NMPrado 2017-08-26 22:37:08

1

這只不過基數排序。它的C代碼如下:

void Rsort(int *a, int n) 
{ 
    int i, b[MAX], m = a[0], exp = 1; 
    for (i = 0; i < n; i++) 
    { 
    if (a[i] > m) 
     m = a[i]; 
    } 

    while (m/exp > 0) 
    { 
    int bucket[10] = 
    { 0 }; 
    for (i = 0; i < n; i++) 
     bucket[a[i]/exp % 10]++; 
    for (i = 1; i < 10; i++) 
     bucket[i] += bucket[i - 1]; 
    for (i = n - 1; i >= 0; i--) 
     b[--bucket[a[i]/exp % 10]] = a[i]; 
    for (i = 0; i < n; i++) 
     a[i] = b[i]; 
    exp *= 10; 
} 
} 

這裏它對數組中的數字進行操作。編輯代碼以獲取上述問題的代碼並不困難。這裏數組中的每個元素都被認爲是該行的數字。