对一个二维数组进行排序

3

我有一个二维数组,我想根据第一列的内容按降序对其进行排序,但我希望数组保留每一行,并且在第一列移动时也移动第二列。举个例子;

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

会被分类为:
[9, 3]
[4, 18]
[2, 5]
[1, 7]

感谢您的选择。

我对此很困惑。看起来你有一个由int对组成的一维数组。这与二维数组不同。 - shoebox639
2
这是一个二维数组 :) 它是由数组组成的数组。一个值可以被引用为arr[0][1]; - Chris Dennett
我知道2D数组的表示方式。然而,他所问的并没有真正意义。他是否有一个x乘2的数组,实际上应该是只有一对的一个数组?编辑:好吧,在看了一些答案之后,看起来这只是对2D数组的非常非常糟糕的使用(在我看来)。如果OP只有一个对象数组,作为整数对,那么他会做得更好。 - shoebox639
4个回答

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。 - Amir Raminfar
1
如果你想让这个适用于负整数,使用 <> 代替返回差值。否则,差值可能会超出 int 范围。 - erickson

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];
    }
});

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;
 }
}

这里是在对数组中的数字进行操作。编辑代码以获取上述问题的代码并不困难。在这里,数组的每个元素都被视为该行号的数字。


0

我不能具体地说Java,但算法应该是可翻译的。重点是在交换时移动行中的两个或更多元素。

int var [n][2] // 你的整数数组 // [[选择一种排序方法]] // 我将使用冒泡排序 // 为了清晰起见,尽管效率低下 int temp[2]; bool stillSorting = true; do { stillSorting = false; for (int x = n; x < 1; x--) { if (var[x][0] > var[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);

这是哪种编程语言? - Anderson Green
这只是初学者的伪代码,采用C++风格,因为那时我只熟悉这种语言。 - NMPrado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接