C语言编程题目:建立一个字符型二维数组,以行为单位每列进行排序,再对行进行排序,最 后输出

如题所述

#include "stdio.h"
#include <stdlib.h>
#include <string.h>
#include "time.h"
#define N 5
#define M 7
int main(int argv,char *argc[]){
char s[M][N],x[N];
int i,j,k,t;
srand((unsigned)time(NULL));
printf("The original array:\n");
for(i=0;i<M;i++){//生成字符型二维数组
for(j=0;j<N-1;printf("%c ",s[i][j++]=rand()%26+97));
printf("\n");
s[i][j]='\0';
}
printf("Column sorted array:\n");
for(i=0;i<M;i++){//对每行进行列排序
for(j=0;j<N-1;j++){
for(k=j,t=k+1;t<N-1;t++)
if(s[i][k]>s[i][t])
k=t;
if(k-j)
t=s[i][k],s[i][k]=s[i][j],s[i][j]=t;
printf("%c ",s[i][j]);
}
printf("\n");
}
printf("Row sorted array:\n");
for(i=0;i<M;i++){
for(k=i,j=k+1;j<M;j++)
if(strcmp(s[k],s[j])>0)
k=j;
if(k-i)
strcpy(x,s[k]),strcpy(s[k],s[i]),strcpy(s[i],x);
for(k=0;k<N-1;printf("%c ",s[i][k++]));
printf("\n");
}
return 0;
}

运行样例:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-10
由于不知道是否是已知数组,所以就写了个更具一般性的动态数组解决了这个问题!如下:

//本代码在VS2010下成功运行!

#include "stdafx.h"
#include "malloc.h"
#include "stdio.h"

void sort(char **H,int,int);
int _tmain(int argc, _TCHAR* argv[])
{
int i,j;
printf("请输入行数i =");
scanf("%d",&i);
getchar();
printf("请输入列数j =");
scanf("%d",&j);
getchar();
char **H=(char **)malloc(i*sizeof(char *));

for(int t=0;t<i;t++)
H[t]=(char *)malloc((j+1)*sizeof(char));//定义动态二维数组中的每一行!最后有个\0字符,多申请个位置

//下面就是为数组赋值了!
printf("\n输入的字符串字母大小写应该一致哦,这样才有排序的意义嘛~~\n\n");
for(int t = 0; t < i; t++ )
{
printf("请输入第%d行的字符串:",t+1);
scanf("%s",H[t]);
getchar();

}
//赋值完成,下面可以排序啦!

sort(H,i,j);

for(int s=0;s<i;s++)
{
printf("%s\n",H[s]);
}
//记得释放malloc分配的内存空间哦~o_o~
for(int t=0;t<i;t++)
{
free(H[t]);
}
free(H);
return 0;
}

void sort(char **H,int i,int j)
{
char tmp;
char *TMP;
for(int _i=0;_i<i;_i++)
{
for(int t=0;t<j;t++)//单行排序,不妨从小到大,冒泡法吧!
{
for(int _j=0;_j<j-1-t;_j++)
{
if(H[_i][_j]>H[_i][_j+1])
{
tmp=H[_i][_j+1];
H[_i][_j+1]=H[_i][_j];
H[_i][_j]=tmp;
}
}
}
}

//下面是全行排序!都是按从小到大的顺序!
for(int t=0;t<i;t++)
{
for(int _i=0;_i<i-1-t;_i++)
{
if(H[_i][0]>H[_i+1][0])
{
TMP=H[_i+1];
H[_i+1]=H[_i];
H[_i]=TMP;//这里注意,改变顺序要改变该行的头指针!不能仅仅是头元素的值排序!
}

}
}
}
//写到这里就代码部分就差不多了,应该具有一般普适性吧!但是容错性很不是很高哦~谨防暴力测试T^T
//如有更好的代码或者算法请联系:[email protected]一起学习~~
//若该代码有bug还望直接回复、指正!谢谢~本回答被网友采纳
相似回答