冒泡排序法求解释错误

#include "stdio.h"
int main()
{
int i,j,t;
int a[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[10]);
}    
for(j=0;j<9;j++)    
{
for(i=0;i<9-j;i++)
{
if(a[i]>a[i+1])    
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;    
}    
}    
}    
for(i=0;i<9;i++)
{
printf("%d",a[i]);    
}    
    return 0;
}

修改代码如下:

#include "stdio.h"
int main()
{
    int i, j, t;
    int a[10];
    for(i = 0; i < 9; i++)
    {
        scanf("%d", &a[i]);
    }    
    for(j = 1; j < 9; j++)    
    {
        for(i = 0; i < 9-j; i++)    
        {
            if(a[i] > a[i+1])    
            {
                t = a[i];
                a[i] =a [i+1];
                a[i+1] = t;    
            }    
        }    
    }    
    for(i = 0; i < 9; i++)
    {
        printf("%d", a[i]);    
    }    
    return 0;
}

首先,你的scanf("%d", &a[10])有问题,你这个不仅下标越界,而且每次输入的值都作为越界那个元素的值去了,应该用&a[i]。

其次,在比较的那个循环体中,你的第二个循环判断条件有误,当j = 0时,i会比较到i<9,那么你的i+1=10>9又越界了。你可以用8-i,或者用我的那个判断条件也行