Сортировка двумерного массива - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть двумерный массив, который я хотел бы отсортировать в порядке убывания в зависимости от содержимого первого столбца, однако я бы хотел, чтобы массив сохранял каждую строку и перемещал второй столбец при первом перемещении. Чтобы привести это в пример;

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

будет отсортировано по:

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

Спасибо.

Ответы [ 4 ]

4 голосов
/ 11 ноября 2010

Попробуйте:

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

Я не проверял это, но оно должно работать.Обратите внимание, что вы можете отменить вычитание, чтобы изменить нисходящий.

2 голосов
/ 11 ноября 2010
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 голос
/ 29 августа 2012

Это ничего кроме 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;
 }
}

Здесь он работает с цифрами чисел в массиве.Не так сложно отредактировать код, чтобы получить код для вышеуказанной проблемы.Здесь каждый элемент массива рассматривается как цифра для этого номера строки.

0 голосов
/ 12 ноября 2010

Я не могу говорить с Java специально, но алгоритм должен быть переводимым. Смысл в том, чтобы при переключении перемещать оба элемента (или более) строки.

int var [n] [2] // ваш массив int
// [[выберите метод сортировки]]
// Я собираюсь использовать пузырьковую сортировку
// для наглядности, несмотря на неэффективность
int temp [2];
bool stillSorting = true;
делать
{

stillSorting = false;
для (int x = n; x <1; x--) <br> {

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...