编写函数,对于给定的二维整型数组,首先对每行从小到大排序,之后对每列从小到大排序;反复执 行上述排序过程,直到没有变动为止。注:作为实参的二维整型数组,每行元素个数不低于 3 且每列 元素个数不低于 4。
#include<stdio.h>
#define row 4 //以四行三列为例
#define col 3
void mysort(int a[row][col]) {
int tmp; //中间值,用于交换
int key = 0; //检测是否有变动
while (key == 0) {
key = 1; //初始化为1
for (int i = 0; i < row; i++) { //行排序(冒泡)
for (int j = 0; j < col; j++) {
for (int k = j + 1; k < col; k++) {
if (a[i][j] > a[i][k]) {
key = 0; //进行了交换,即有元素变动
tmp = a[i][j];
a[i][j] = a[i][k];
a[i][k] = tmp;
}
}
}
}
for (int i = 0; i < col; i++) { //列排序(冒泡)
for (int j = 0; j < row; j++) {
for (int k = j + 1; k < row; k++) {
if (a[j][i] > a[k][i]) {
key = 0; //同上
tmp = a[j][i];
a[j][i] = a[k][i];
a[k][i] = tmp;
}
}
}
}
}
}
int main() {
int a[row][col] = { { 1,2,3 },{ 0,1,0 },{ 4,6,8 },{ 7,6,1 } };
mysort(a);
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}
/*
0 0 1
1 2 3
1 6 7
4 6 8
*/