C语言之基本算法42—矩阵转置及按行按列排序

//矩阵转置 按行按列排序

/*

==================================================================

题目:输入m*n矩阵,按行升序排列输出。

输入:

4 3 5 6 2

9 8 1 2 8

7 1 2 3 8

输出:

2 3 4 5 6

1 2 8 8 9

1 2 3 7 8

==================================================================

*/

#include<stdio.h>

#define M 3

#define N 5

main()

{

int i,j,k,a[M][N],b[N][M],c[M][N],d[M][N],t;

//输入原矩阵a

printf("输入%d*%d矩阵:\n",M,N);

for(i=0;i<M;i++)

for(j=0;j<N;j++)

scanf("%d",&a[i][j]);

//输出原矩阵a

printf("\n原序列输出:\n");

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

printf("%3d  ",a[i][j]);

printf("\n");

}

//复制原矩阵a到c

for(i=0;i<M;i++)

for(j=0;j<N;j++)

c[i][j]=a[i][j];

//原矩阵按行排序

printf("按行升序:\n");

i=0;

while(i<M)

{

for(j=0;j<N;j++)

for(k=j+1;k<N;k++)

if(a[i][j]>a[i][k])

{t=a[i][j];a[i][j]=a[i][k];a[i][k]=t;}

i++;

}

//输出原按行排序的结果

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

printf("%3d  ",a[i][j]);

printf("\n");

}

//原矩阵转置得到b

for(i=0;i<M;i++)

for(j=0;j<N;j++)

b[j][i]=c[i][j];

i=0;

//输出转置矩阵b

printf("输出转置矩阵:\n");

for(i=0;i<N;i++)

{

for(j=0;j<M;j++)

printf("%3d  ",b[i][j]);

printf("\n");

}

//转置后(即b)按行排序

i=0;

while(i<N)

{

for(j=0;j<M;j++)

for(k=j+1;k<M;k++)

if(b[i][j]>b[i][k])

{t=b[i][j];b[i][j]=b[i][k];b[i][k]=t;}

i++;

}

//再将b转置,即排序后返回原型

printf("按列排序:\n");

for(i=0;i<N;i++)

for(j=0;j<M;j++)

d[j][i]=b[i][j];

//输出b的转置矩阵d,即为原矩阵按列排序

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

printf("%3d  ",d[i][j]);

printf("\n");

}

}

/*

==================================================================

评:改动M(行)和N(列)的值可以实现任意二维矩阵的转置、按行按列排序。

分三段:

1、输入

2、原序输出

3、按行升序

关键是第三步,用while实现j优先于i,待j循环完成后i++,直到i>M;

按列排序可以认为是对转置矩阵按行排序,用两次转置完成!

==================================================================

*/

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 20:52:46

C语言之基本算法42—矩阵转置及按行按列排序的相关文章

1154: 零起点学算法61——矩阵转置

1154: 零起点学算法61--矩阵转置 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1324  Accepted: 698[Submit][Status][Web Board] Description 现要求你把一个矩阵行列转置后输出,注意行数和列数可能不相同的. Input 多组测试数据,每组测试数据先在一行输入n 和m ,表示这个矩阵的行数和列数(1 < n,m <= 10) 然后是n行

C语言之基本算法33—矩阵的基本运算

//矩阵基础 /* ================================================================== 题目:输入矩阵a,b,输出a,b,a的转置矩阵d,a*b,b+d=e; ================================================================== */ #include<stdio.h> #define TJ1 for(i=0;i<2;i++) #define TJ2 for(

C语言值基本算法43—总结

C程序的基本算法共涵盖42个例题,包含了枚举.排列.逻辑判断.迭代.递推.字符串操作.矩阵操作.格式输出等内容. 相关的实现方法有的显得很笨拙,但足够说明问题,而且每个程序都经过作者亲测,保证可以运行.之所以称之为基本算法,就是为了测试基础知识的掌握,都是从原始的角度进行处理,没有运用过于花哨的处理技巧,作者也是在学习中进步,也希望这些代码对于没有基础或者基础薄弱的朋友带来帮助. 至此,基本知识就掌握了,我们常常会听说C的强大,因为它是面向过程的,在数学领域具有极好的应用,有必要进行进一步的学习

省选算法学习-矩阵与矩阵快速幂

0x00 引入 矩阵,顾名思义,就是由数构成的矩形阵列 比如这样的:$\begin{array}{l}\begin{bmatrix}2&3&4\0&7&13\c&\alpha&\sqrt5\end{bmatrix}\\end{array}$ 就是一个3*3的矩阵 矩阵在信息学乃至数学里面的用处都非常广泛,下面就来介绍下它的一些基本知识,以及常用的地方.本文同时还会介绍矩阵快速幂以及快速矩阵乘法. 0x01 何为矩阵 矩阵的定义 其实就是上面那样的啦.....

Matlab Delete Row or Col 删除矩阵的行或列

Matlab中,我们有时候要删除矩阵中的某行某列,可以采用下列方法进行删除: a = [ 1 2 3 4 5 6 7 8 9]; a(2,:) = []; % Delete row 2 a(:,2) = []; % Delete col 2

java 矩阵转置算法

工作中用到了行列转置,把这两种情况的算法记下来,以便后用 1.行列数相等的转置 1 /** 2 * @description 矩阵转置 3 * @author oldmonk 4 * @time 2017年8月18日 5 */ 6 public class test { 7 8 public static void main(String [] args) { 9 int data [][] = new int [] [] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8,

矩阵应用实例及js实现矩阵转置算法

场景: 后端返回的是[['2015-1-1',1,1],['2015-1-2',1,2]]这样的Json数组,代表的意思是2015-1-1这个日期下新增的数据为1,减少的数据为1,2015-1-2这个日期,新增的数据为1,减少的数据为2,但是在统计图表上要在x轴显示时间,y轴显示新增和减少的数据这时,就要把数据转化成[['2015-1-1','2015-1-2'],[1,1],[1,2]]这样的结构,这也可以叫做矩阵的转置. 关于矩阵转置,可以用下图简单说明一下: 图片描述(最多50字) A表示

(算法)求矩阵转置

题目: 编写一个函数,输入为一个矩阵,打印这个矩阵转置后的结果. 例: 输入矩阵是 1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 打印结果应该是 13,9,5,1 14,10,6,2 15,11,7,3 16,12,8,4 思路: 1.从外到内,一圈一圈地循环替换: 2.对矩阵进行从[i,j]到[j,i]的交换,然后在进行列的首尾交换: 代码: #include<iostream> #include<vector> using namespace s

【Golang语言版本】LeetCode 867. Transpose Matrix 矩阵转置

矩阵转置,A[i][j] 变成A[j][i] 比较简单,直接上代码了. func transpose(A [][]int) [][]int { B := make([][]int, len(A[0])) for i := 0; i < len(A[0]); i++ { B[i] = make([]int, len(A)) for j := 0; j < len(A); j++ { B[i][j] = A[j][i] } } return B } 原文地址:https://blog.51cto.