c语言5个字符串进行字母大小排序

#include <stdio.h>
#include <cstdlib>
main()
{
char a[]="abcd",b[]="aabc",c[]="bbde",d[]="cacc",e[]="baaa";
char *p[5]={a,b,c,d,e},*t;

for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
{
if(*p[i]==*p[j]) //判断第一个字母是否相同
{ p[i]++,p[j]++; //如果相同,字母移动到第2位
if(*p[i]<*p[j]) //接着比较字母的大小
{
t=p[i];
p[i]=p[j];
p[j]=t;
}
p[i]--,p[j]--; //比较结束后,指针重新指向第一个字母
}
if(*p[i]<*p[j]) //比后两组较字母的大小
{
t=p[i];
p[i]=p[j];
p[j]=t;
}

}

for(int i=0;i<5;i++)//打印字母
puts(p[i]);
system("pause");

}

结果为:cacc; bbde; baaa; abcd; aabc; 请各位高手帮我分析一下这个结果是怎样得出来的 要详步骤 谢谢
for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
请描述一下循环步骤

for(int i=0;i<4;i++)
for(int j=i+1;j<5;j++)
当i=0时,j为1到4,也就是说p[0]和p[1]、p[2]、p[3]、[4]依次比较,把最大的求出来放到该数组的第一个元素,即p[0].
当i=1时,j为2到4,也就是说p[1]和p[2]、p[3]、p[4]依次比较,把后面四个元素的最大值求出来放到该数组的第二个元素,即p[1].
以此类推,分别求出后面三个元素的最大值,接着后面两个元素的最大值,最后剩下的一个就放在数组的最后一个元素里面。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-01
设断点跟踪不久好了,凡事要自己动手才能有进步!
第2个回答  2012-02-29

看图

相似回答