69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
int Sum(char a[],int n)
{
int k,j,sum=0;
for (j=0;j<n;j++)
{
for (k=j+1;k<n;k++)
{
if (a[j]>a[k]) sum++;
}
}
return sum;
}
int main()
{
int n,m;
int i,j,t;
char a[128][110],c[110]; //m 是 100以内,你开50肯定不够,n 是50内,倒是够了。
int b[128];
//交换地址,避免copy内存
char *pStrOutList[128];
char *tp;
scanf("%d %d",&n,&m);
for (i=0;i<m;i++)
{
scanf("%s", a[i]);
b[i] = Sum(a[i],n); //求b[i]的值
pStrOutList[i] = a[i];
}
// 冒泡
for (i=0;i<m;i++) //n 和 m 别搞混了
for (j=i + 1;j<m;j++)
{
if(b[i]>b[j])
{
t=b[i]; //strcpy(c,a[j]);
b[i]=b[j]; //strcpy(a[j],a[j+1]);
b[j]=t; //strcpy(a[j+1],c); //若前个b[i]大的话就交换 连同字符窜一起交换
tp = pStrOutList[i];
pStrOutList[i] = pStrOutList[j];
pStrOutList[j] = tp;
}
}
for (i=0;i<m;i++)
printf("%s\n", pStrOutList[i]);
return 0;
}
for (i=0;i<m-1;i++)//排序的这个地方要用m,不是n
{
for (j=0;j<m-1-i;j++)
{
if(b[j]>b[j+1])
{
t=b[j]; strcpy(c,a[j]);
b[j]=b[j+1]; strcpy(a[j],a[j+1]);
b[j+1]=t; strcpy(a[j+1],c);
}
}
}
for (i=0;i<n;i++)
{
memset(a[i], 0, 110);//这儿将字符串置空,省的有乱码
scanf("%s",a[i]);
b[i]=Sum(a[i],m);
}