两段同样的冒泡排序代码产生不同的结果

在学习了冒泡法后尝试用冒泡法把数字由小到大排序,但是第一次输出的结果顺序未变,又敲了一遍结果又正确了,很奇怪。
产生错误结果的代码:
#include<stdio.h>
int main()
{
    int a[10];
    int j,i,m;
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    for(j=0;j<9;j++);
        {
            for(i=0;i<9-j;i++)
            {
                if(a[i]>a[i+1])
                {
                    m=a[i];a[i]=a[i+1];a[i+1]=m;
                }
            }
        } 
    for(i=0;i<10;i++)
    printf("%-3d",a[i]);
    return 0;
}

产生正确结果的代码:

#include<stdio.h>
int main()
{
    int a[10];
    int i,j,t;
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);
    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<10;i++)
    printf("%-3d",a[i]);
    return 0;
}

代码1输出的为原始顺序,代码2输出才是由小到大的正确顺序 ,不知道到底哪里不一样导致了错误。

第一个代码第8行多了个;

第八行多了一个分号