假设我有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
但我想知道我需要改变什么,才能使用相同的功能对列进行排序?
答案 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