文章目录
- 代码实现
- 代码解释
- 注意事项
代码实现
下面是一个简单的C语言程序,它读取用户输入的4行5列的二维数组,并按照列对数组进行排序。
#include <stdio.h>int main() {int a[4][5];// 读取用户输入的二维数组for (int i = 0; i < 4; i++) {for (int j = 0; j < 5; j++) {scanf("%d", &a[i][j]);}}// 按照列对数组进行排序for(int i=0; i<4; i++){for(int k=0; k<4; k++){ // 注意这里的循环条件应该是k<4,因为数组下标从0开始for(int m=0; m<4-k-1; m++){ // 内层循环应该使用4-k-1作为上限,以避免重复交换if(a[m][i] > a[m+1][i]){ // 比较同一列的元素int t = a[m][i];a[m][i] = a[m+1][i];a[m+1][i] = 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;
}
代码解释
-
数组定义与输入:首先定义了一个4行5列的二维数组
a[4][5]
,并使用嵌套循环读取用户输入的20个整数。 -
排序逻辑:使用三重循环对数组的每一列进行冒泡排序。外层循环遍历每一列,中间循环控制排序的行数,内层循环进行冒泡排序的比较和交换操作。
-
输出结果:最后,使用嵌套循环遍历并打印排序后的二维数组。
注意事项
- 在排序逻辑中,内层循环的上限应该是
4-k-1
,因为数组下标从0开始,且每完成一次排序,最大的元素会被放置在正确的位置,不需要再次参与比较。 - 比较和交换操作应该针对同一列的元素进行,即
a[m][i]
和a[m+1][i]
。