对2维数组进行排序

我有一个2D数组,我想根据第一列的内容按降序排序,但是我希望数组保留每一行并在第一列移动时移动第二列。 把它作为一个例子;

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

将被分类为:

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

谢谢。

 int[][] d2 = { {2,5}, {4,18}, {1,7}, {9,3} }; java.util.Arrays.sort(d2, new java.util.Comparator() { public int compare(int[] a, int[] b) { return b[0] - a[0]; } }); 

尝试这个:

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

我没有测试过这个,但它应该可行。 请注意,您可能希望反转减法以更改降序。

它只不过是Radix Sort。 它的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; } } 

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

我不能专门谈论java,但算法应该是可翻译的。 关键是在交换时移动行的两个元素(或更多)。

int var [n] [2] //你的int数组
// [[选择排序方法]]
//我将使用冒泡排序
//为了清楚起见,尽管效率低下
int temp [2];
bool stillSorting = true;

{

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