从键盘输入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]) ;
}
}
在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。
然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。
对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。
程序源码:
#include <stdio.h>编译运行后的结果如下:
程序源码和编译后的可执行程序已经打包放在附件里,可以直接下载运行。