类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
先看代码如下;
#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[i]);
printf("\n");
for(i=1;i<=length;++i) //排序
if(buf[i]<buf[i-1]){
temp=buf[i];
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[i]);
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。不知为什么。郁闷中!~~~~
还望各位看看哪里出现错误了!
网友回答:
这样就可以了
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
void main()
{
int buf[]={11,5,33,7,1};
int i,j,length,temp;
length=5;
printf("ÅÅÐòǰ£º");
for(i=0;i<length;i++)
printf("%d\t",buf[i]);
printf("\n");
for(i=1; i < length; ++i) //ÅÅÐò
if(buf[i]<buf[i-1])
{
temp=buf[i];
for(j=i-1; temp < buf[j] && j >=0; --j)
//这里帮你trace了一下, 主要是数组越界了(下界)
buf[j+1]=buf[j];
buf[j+1]=temp;
}
printf("ÅÅÐòºó£º");
for(i=0;i<length;i++)
printf("%d\t",buf[i]);
printf("\n");
}
for(j=i-1;temp<buf[j];--j)
这一句出错了,可能导致j= -1时还在比较temp<buf[j],可以改为for(j=i-1;j >= 0 && temp<buf[j];--j),j >= 0 一定要放前面,这样当j=-1时就不会检测后面的temp<buf[j],也就不会有非法数据buf[-1]了。