我有一个二维数组,我想根据第一列的内容按降序对其进行排序,但我希望数组保留每一行,并且在第一列移动时也移动第二列。举个例子;
[2, 5]
[4, 18]
[1, 7]
[9, 3]
会被分类为:
[9, 3]
[4, 18]
[2, 5]
[1, 7]
感谢您的选择。
我有一个二维数组,我想根据第一列的内容按降序对其进行排序,但我希望数组保留每一行,并且在第一列移动时也移动第二列。举个例子;
[2, 5]
[4, 18]
[1, 7]
[9, 3]
[9, 3]
[4, 18]
[2, 5]
[1, 7]
试试这个:
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];
}
});
我没有测试过,但应该可以正常工作。请注意,如果要改变降序,您可能需要将减法反转。
<
和 >
代替返回差值。否则,差值可能会超出 int
范围。 - ericksonint[][] 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];
}
});
这只是基数排序。它的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 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);