C中,这个用冒泡法排序的字符串程序怎么升序排列就不对了,请看补充:

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:09:49
#include <stdio.h>
#include <string.h>
void main()
{static char s[][10]={"while","for","switch","if","break","continue"};
char temp[10];
int i,j;
clrscr();
for(i=0;i<6-1;i++)
for(j=0;j<6-i;j++)
if(strcmp(s[j],s[j+1])>0)/*当这是“>“时,在输出的时候就变成了连续输出6个while了,不是升序排列,但当我把这改成“<"时,就是降序排列了,结果正确,哪里错了,为什么冒泡升序不对而降序对呢,怎样改啦?谢谢*/
{strcpy(temp,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],temp);
}
for(i=0;i<6;i++)
printf("%s\n",s[i]);
getch();
}
可是那样,为什么就错了?

在我的机子里运行时,不会都输出while,而是有一行是空的
原因是:

for(i=0;i<6-1;i++)
for(j=0;j<5-i;j++) //j<5-i,不然第一次冒泡时,数组会跟未知的数据比较
{... //会出现strcmp(s[5],s[6]),但是s[6]是未知的。。。所以。。。
}

for(i=0;i<6-1;i++)
for(j=i+1;j<6;j++) {
...
}