LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 718|回复: 1

一个插入排序的例子。出现BUG!!!

[复制链接]
发表于 2004-10-13 15:10:34 | 显示全部楼层 |阅读模式
先看代码如下;

#include <stdio.h>

void main()
{
        int buf[]={11,5,33,7,1};
        int i,j,length,temp;
        length=sizeof(buf)/sizeof(int);
        printf("排序前:");
        for(i=0;i<length;i++)
                printf("%d\t",buf);
        printf("\n");

        for(i=1;i<=length;++i)                //排序
                if(buf<buf[i-1]){
                        temp=buf;
                        for(j=i-1;temp<buf[j];--j)
                                buf[j+1]=buf[j];
                        buf[j+1]=temp;
                }
       
        printf("排序后:");
        for(i=0;i<length;i++)
                printf("%d\t",buf);
        printf("\n");
}

运行结果为:
排序前:11      5       33      7       1
排序后:4       5       7       11      33

在代码中,int buf[]={11,5,33,7,1};这一行明明是“1”,怎么会出现“4”??
另外我试了如果将最后的元素改成6,8或其他大于等于4的数据都会出现正确的答案,可如果换成1,2,或3,出现的结果都出现4。不知为什么。郁闷中!~~~~

还望各位看看哪里出现错误了!
发表于 2004-10-13 15:56:18 | 显示全部楼层
for(i=1;i<=length;++i) //排序
         ~~~数组越上界,改为i<length
if(buf<buf[i-1]){
temp=buf;
for(j=i-1;temp<buf[j];--j)
         ~~~~~~~~~~~~数组越下界,改为temp<buf[j]&&j>=0
buf[j+1]=buf[j];
buf[j+1]=temp;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表