Как использовать одну функцию для строк и столбцов в 2D массиве? - PullRequest
0 голосов
/ 16 мая 2018

Допустим, у меня есть функция сортировки для 1D массива

void sort(int a[], int n){
    int temp;
    for (int i = 0; i < n; i++){
       for (int j = i + 1; j < n; j++){
           if (a[i] > a[j]){
               temp = a[j];
               a[j] = a[i];
               a[i] = temp;
           }
       }
   }
}

Я знаю, как заставить сортировать все строки двумерного массива:

for (i = 0; i < n; i++)
       sort(b[i], m); // b is 2d array n - rows m - columns

Но мне интересно, что мне нужно изменить, чтобы можно было использовать такую ​​же функцию для сортировки столбцов?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы можете изменить функцию сортировки так, чтобы она проходила через столбцы, передавая дополнительный аргумент:

void sort(int a[n][m], int n, int col_index){
    int temp;
    for (int i = 0; i < n; i++){
       for (int j = i + 1; j < n; j++){
           if (a[i][col_index] > a[j][col_index]){
               temp = a[j][col_index];
               a[j][col_index] = a[i][col_index];
               a[i][col_index] = temp;
           }
       }
   }
}

И затем реализовав его следующим образом

for(int i=0;i<m;i++){
    sort(b,n,i);
}

Надеюсь, это поможет.

0 голосов
/ 16 мая 2018

Вы можете транспонировать входящий 2D-массив для обмена строками и столбцами и выполнять обычную сортировку.

возможно, добавьте флаг, чтобы определить, нужно ли вам transpose или нет

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