C排序错那了

来源:百度知道 编辑:UC知道 时间:2024/09/22 16:44:36
#include<stdio.h>
void main()
{int i,j,d=0,a[10]={1111,11,24,3,354,246,245,948,94,64};
do
{d++;
for(i=0;i<=9;i++)
{if(a[i]<=a[i+1])
{j=a[i];
a[i]=a[i+1];
a[i+1]=j;
printf("%d,",a[i]);}
else
printf("%d,",a[i]);}
printf("\n");}
while(d<=13);}
排序输出的最小数值,怎么和定义的数组中最小数值不一样.随D的增大最小值发生变化.
若a[10]={1111,21,24,37,354,246,245,948,94,64};时有能正确输出了.

for(i=0;i<=9;i++)
{if(a[i]<=a[i+1])
{j=a[i];
a[i]=a[i+1];
a[i+1]=j;
printf("%d,",a[i]);}

这一段 i=9 时,a[i]=a[i+1]数组下界溢出错误

改成下面这样

#include<stdio.h>
void main()
{int i,j,d=0,a[10]={1111,11,24,3,354,246,245,948,94,64};
do
{d++;
for(i=0;i<9;i++)
{
if(a[i]<=a[i+1])
{j=a[i];
a[i]=a[i+1];
a[i+1]=j;
printf("%d,",a[i]);}
else
printf("%d,",a[i]);
}
printf("%d,",a[i]);
printf("\n");}
while(d<13);
}

a[10]的值不确定
要看if(a[i]<=a[i+1])的判定
有时会影响结果 有时不会