Сортировка двумерного массива с помощью сортировки вставками

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

private static void InsertionSort(int[] a, int n) {

    int key, j;
    for (int i = 1; i < n; i++){
            key = a[i];
            j = i - 1;
            while ((j >= 0) && (a[j] > key)){
                a[j+1] = a[j];
                j = j - 1;
            }
            a[j+1] = key;
    }
}

Для двумерного массива я указываю целое число c для столбца, по которому сортируется массив. Например, если я сортирую по первому столбцу,

{4, 1, 3},
{6, 0, 2},
{5, 9, 8}

становится

{4, 1, 3},
{5, 9, 8},
{6, 0, 2}

Это то, что я получил до сих пор для сортировки 2D-массива по указанному столбцу

private static void InsertionSort(int[][] a, int n, int c) {

    in key, j;
    for (int i = 1; i < n; i++){
        key = a[i][c];
        j = i - 1;
        while ((j >= 0) && (a[j][c] > key)){
            a[j+1][c] = a[j][c];
            j = j - 1;
        }
        a[j+1][c] = key;
    }
}

но результат сортировки по первому столбцу

{4, 1, 3}
{5, 0, 2}
{6, 9, 8}

Он сортирует элементы первого столбца, не сохраняя их вместе с соответствующими строками. Как я могу это решить?


person Saiyan    schedule 03.02.2016    source источник


Ответы (2)


Вам нужно поменять строку данных, а не только элемент данных.

private static void sort(int[][] a, int n, int c) {
    int key, j;
    for (int i = 1; i < n; i++){
        key = a[i][c];
        int[] keyRow = a[i];
        j = i - 1;
        while ((j >= 0) && (a[j][c] > key)){
            //a[j+1][c] = a[j][c];
            a[j+1] = a[j];
            j = j - 1;
        }
        //a[j+1][c] = key;
        a[j+1] = keyRow;
    }
}
person Raj    schedule 03.02.2016

С Java 8 вы можете сделать это в одну строку.

Arrays.sort(data, (a, b) -> a[COL] - b[COL]);

где COL — столбец для сортировки.

person Raj    schedule 03.02.2016