尝试做了下 结果还是不对阿,请问该怎么修改?

从键盘输入5行4列的二维整型数组 a 的各元,然后将数组a各列元素分别按升序排序,再按行输出数组a的各元.

#include <stdio.h>
#define M 5
#define N 4
main()
{
int a[M][N],i,j,k,t=0;
for(i=0; i<M; i++)
for(j=0; j<N; j++)
scanf("%d", &a[i][j]);
for(j=0;j<N;j++)
{for(i=0;i<M;i++)
{for(k=0;k<M;k++)
if(a[k][j]>a[k+1][j])
{ t=a[k][j];
a[k][j]=a[k+1][j];
a[k+1][j]=t;}
}
}

for(i=0;i<M;i++)
{printf("\n");
for(j=0;j<N;j++)
printf("%d ",a[i][j]) ;

}
}

绝地无双
浏览 62回答 2
2回答

慕标琳琳

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。程序源码:#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>&nbsp;&nbsp;#define&nbsp;M&nbsp;3#define&nbsp;N&nbsp;3&nbsp;//输出二维数组的函数void&nbsp;print(int&nbsp;a[][N]){&nbsp;&nbsp;&nbsp;int&nbsp;i,j;&nbsp;&nbsp;&nbsp;for(i=0;i<M;i++)&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j<N;j++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d&nbsp;",a[i][j]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");&nbsp;&nbsp;&nbsp;}&nbsp;}&nbsp;//qsort的cmp函数int&nbsp;cmp(const&nbsp;void*a,&nbsp;const&nbsp;void&nbsp;*b){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*(int*)a-*(int*)b;}&nbsp;int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a[M][N]={3,2,1,9,8,7,6,5,4};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("按列排序前的二维数组是:\n");&nbsp;&nbsp;&nbsp;&nbsp;print(a);&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j<N;j++)//对每一列进行升序排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对第j列进行排序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;m,n;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;t;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(m=M-1;m>0;m--)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(n=0;n<m;n++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a[n][j]>a[n+1][j])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=a[n][j];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[n][j]=a[n+1][j];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[n+1][j]=t;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("按列排序后二维数组变为:\n");&nbsp;&nbsp;&nbsp;&nbsp;print(a);&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//对按列排序后的二维数组按行升序排序&nbsp;(调用快速排序函数)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<M;i++)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qsort(a[i],N,sizeof(a[i][0]),cmp);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("按列排序后再按行排序后二维数组变为:\n");&nbsp;&nbsp;&nbsp;&nbsp;print(a);&nbsp;&nbsp;&nbsp;&nbsp;printf("\n");&nbsp;&nbsp;&nbsp;&nbsp;system("pause");&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}编译运行后的结果如下:&nbsp;

Cats萌萌

冒泡法。。#include <stdio.h>&nbsp;#define M 5&nbsp;#define N 4&nbsp;void main()&nbsp;{&nbsp;int a[M][N],i,j,k,t=0;&nbsp;for(i=0; i<M; i++)&nbsp;for(j=0; j<N; j++)&nbsp;scanf("%d", &a[i][j]);&nbsp;for(j=0;j<N;j++)&nbsp;{for(i=0;i<M;i++){for(k=M-1;k>i;k--)if(a[k][j]<a[i][j])&nbsp;{&nbsp;t=a[k][j];&nbsp;a[k][j]=a[i][j];&nbsp;a[i][j]=t;}&nbsp;}&nbsp;}&nbsp;for(i=0;i<M;i++)&nbsp;{printf("\n");&nbsp;for(j=0;j<N;j++)&nbsp;printf("%d ",a[i][j]) ;&nbsp;}&nbsp;}你的K+1会超过M的。
打开App,查看更多内容
随时随地看视频慕课网APP