求助!~![关于排序]
以下是我编的一个小小的排序程序:#include<stdio.h>
#include<string.h>
void select(item,count)
char *item;
int count;
{
register int a,b,c;
char t;
for(a=0;a<count-1;++a)
{
c=a;
t=item[a];
for(b=a+1;b<count;++b)
{
if(item[b]<t) /*如果将此行中的t改成item[a],运行结果就会错误。例如输入:bggdeea,输出的就是abedegg*/
{
c=b;
t=item[b];
}
}
item[c]=item[a];
item[a]=t;
}
}
main()
{
char s[80];
printf("\tPlease insert the ring:");
gets(s);
select(s,strlen(s));
printf("\t:After order is :%s\n",s);
getch();
}
经过小小的修改后,发现输出的结果不是自己期望得到的,还望诸位大侠能予以指教~!谢谢!~
----------------解决方案--------------------------------------------------------
t=item[a];
for(b=a+1;b<count;++b)
{
if(item[b]<t)
{
c=b;
t=item[b];
}
}
这一段的作用是在item[a]之后的数据找出一个最小的,然后跟item[a]交换,每当找到一个比当前的t小的值,就把值赋给t,你如果换成item[b]<item[a],那就是一直跟item[a]比较而已,是找不到最小值的
----------------解决方案--------------------------------------------------------
if(item[b]<t) /*如果将此行中的t改成item[a],运行结果就会错误。例如输入:bggdeea,输出的就是abedegg*/
这是肯定要出错的,因为把item[a]替换了t时,在内循环中item[a]是个固定值,它不是每次内循环得到的较小值,所以结果就不会正确了
----------------解决方案--------------------------------------------------------
学习了!
----------------解决方案--------------------------------------------------------
TO 经过小小的修改后,发现输出的结果不是自己期望得到的,还望诸位大侠能予以指教~!谢谢!~
我运行了你的程序已经能够排序!不知道你期望的结果是如何?
----------------解决方案--------------------------------------------------------
select(item,count)是个什么函数?谢谢!
----------------解决方案--------------------------------------------------------
回复:(ascend_0707)select(item,count)是个什么函数...
那时版主自定义了一个排序函数。
----------------解决方案--------------------------------------------------------
回复:(永夜的极光) t=item[a]; for(b=a+1;b&l...
明白了!~!谢谢!~!
----------------解决方案--------------------------------------------------------