自学内容网 自学内容网

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


代码实现

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

代码解释

  1. 数组定义与输入:首先定义了一个4行5列的二维数组a[4][5],并使用嵌套循环读取用户输入的20个整数。

  2. 排序逻辑:使用三重循环对数组的每一列进行冒泡排序。外层循环遍历每一列,中间循环控制排序的行数,内层循环进行冒泡排序的比较和交换操作。

  3. 输出结果:最后,使用嵌套循环遍历并打印排序后的二维数组。

注意事项

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

原文地址:https://blog.csdn.net/weixin_49345320/article/details/143791595

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!