代码实现
下面是一个C语言程序,它读取用户输入的4行5列的二维数组,并按照列对数组进行排序。
#include <stdio.h>
int main() {
int a[4][5]; // 定义一个4行5列的二维数组
// 读取用户输入的二维数组
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
scanf("%d", &a[i][j]); // 读取每个元素的值
}
}
// 按照列对数组进行排序
for(int j=0;j<5;j++){ // 外层循环控制列
for(int i=0;i<3;i++){ // 中层循环控制行,注意这里只需要到第3行,因为最后一行不需要排序
for(int k=0;k<3-i;k++){ // 内层循环进行冒泡排序
if(a[k][j] > a[k+1][j]){ // 如果当前元素大于下一个元素,则交换它们
int t = a[k][j]; // 临时变量用于交换
a[k][j] = a[k+1][j];
a[k+1][j] = t;
}
}
}
}
// 输出排序后的数组
printf("\n按照列排序之后:.....\n");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", a[i][j]); // 打印每个元素
}
printf("\n"); // 每行结束后换行
}
return 0;
}
代码解释
-
数组定义与输入:
int a[4][5];
:定义了一个4行5列的二维数组a
。- 使用两层嵌套循环读取用户输入的20个整数,并存储到数组中。
-
排序逻辑:
- 外层循环
for(int j=0;j<5;j++)
:遍历每一列。 - 中层循环
for(int i=0;i<3;i++)
:由于数组有4行,所以这里只需要到第3行,因为最后一行不需要参与排序。 - 内层循环
for(int k=0;k<3-i;k++)
:进行冒泡排序,比较并交换同一列中相邻的元素。
- 外层循环
-
输出结果:
- 使用两层嵌套循环遍历并打印排序后的二维数组。
注意事项
- 在排序逻辑中,内层循环的上限应该是
3-i
,因为数组下标从0开始,且每完成一次排序,最大的元素会被放置在正确的位置,不需要再次参与比较。 - 比较和交换操作应该针对同一列的元素进行,即
a[k][j]
和a[k+1][j]
。