由于不知道是否是已知数组,所以就写了个更具一般性的动态数组解决了这个问题!如下:
//本代码在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还望直接回复、指正!谢谢~
本回答被网友采纳