C 程序对矩阵的所有列和行进行排序
cserver side programmingprogramming更新于 2024/11/9 14:33:00
问题
编写代码对矩阵的所有行按升序排序,对所有列按降序排序。矩阵的大小和矩阵的元素由用户在运行时给出。
解决方案
以下解释了使用 C 编程语言对矩阵的所有行按升序排序,对所有列按降序排序的解决方案 −
用于对行按升序排序的逻辑如下 −
for (i=0;i<m;++i){ for (j=0;j<n;++j){ 对于 (k=(j+1);k<n;++k){ 如果 (ma[i][j] > ma[i][k]){ a = ma[i][j]; ma[i][j] = ma[i][k]; ma[i][k] = a; } } } }
按降序对列进行排序的逻辑如下 −
for (j=0;j<n;++j){ for (i=0;i<m;++i){ for (k=i+1;k<m;++k){ if (mb[i][j] < mb[k][j]){ a = mb[i][j]; mb[i][j] = mb[k][j]; mb[k][j] = a; } } } }
程序
以下是 C 程序按升序对矩阵的所有行进行排序,按降序对矩阵的所有列进行排序 −
#include <stdio.h> void main(){ int i,j,k,a,m,n; static int ma[10][10],mb[10][10]; printf ("输入矩阵的阶
"); scanf ("%d %d", &m,&n); printf ("输入矩阵的系数
"); for (i=0;i<m;++i){ for (j=0;j<n;++j){ scanf ("%d",&ma[i][j]); mb[i][j] = ma[i][j]; } } printf ("给定矩阵为
"); for (i=0;i<m;++i){ for (j=0;j<n;++j){ printf (" %d",ma[i][j]); } printf ("
"); } printf ("按升序排列行后
"); for (i=0;i<m;++i){ for (j=0;j<n;++j){ for (k=(j+1);k<n;++k){ if (ma[i][j] > ma[i][k]){ a = ma[i][j]; ma[i][j] = ma[i][k]; ma[i][k] = a; } } } for (i=0;i<m;++i){ for (j=0;j<n;++j){ printf (" %d",ma[i][j]); } printf ("
"); } printf ("按降序排列列后
"); for (j=0;j<n;++j){ for (i=0;i<m;++i){ for (k=i+1;k<m;++k){ if (mb[i][j] < mb[k][j]){ a = mb[i][j]; mb[i][j] = mb[k][j]; mb[k][j] = a; } } } } for (i=0;i<m;++i){ for (j=0;j<n;++j){ printf (" %d",mb[i][j]); } printf ("
"); } }
输出
当执行上述程序时,它会产生以下结果 −
输入矩阵的阶数 3 4 输入矩阵的系数 1 2 3 4 1 2 3 4 5 1 2 3 给定的矩阵是 1 2 3 4 1 2 3 4 5 1 2 3 按升序排列行后 1 2 3 4 1 2 3 4 1 2 3 5 按降序排列列后 5 2 3 4 1 2 3 4 1 1 2 3