如何在2D数组中对行和列使用一个函数?

时间:2018-05-16 04:25:03

标签: c arrays sorting

假设我有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;
           }
       }
   }
}

我知道如何对2D数组的所有行进行排序:

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

但我想知道我需要改变什么,才能使用相同的功能对列进行排序?

2 个答案:

答案 0 :(得分:1)

您可以通过传递一个额外的参数来修改sort函数以遍历列:

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

希望这有帮助。

答案 1 :(得分:0)

您可以transpose传入的2D数组来交换行和列并进行正常排序。

可能会添加一个标记来确定您是否需要transpose