Bootstrap

【C语言】实现二维数组按列排序


代码实现

下面是一个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;
}

代码解释

  1. 数组定义与输入

    • int a[4][5];:定义了一个4行5列的二维数组a
    • 使用两层嵌套循环读取用户输入的20个整数,并存储到数组中。
  2. 排序逻辑

    • 外层循环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. 输出结果

    • 使用两层嵌套循环遍历并打印排序后的二维数组。

注意事项

  • 在排序逻辑中,内层循环的上限应该是3-i,因为数组下标从0开始,且每完成一次排序,最大的元素会被放置在正确的位置,不需要再次参与比较。
  • 比较和交换操作应该针对同一列的元素进行,即a[k][j]a[k+1][j]
    在这里插入图片描述
;