(冒泡排序)小弟我已经编出来了,但是不知道哪里出有关问题了

(冒泡排序)我已经编出来了,但是不知道哪里出问题了。
冒泡排序的程序:
#include<stdio.h>
#define N 10

int main(void)//冒泡排序
{
int a[N]={1,3,2,-10,-90,100,78,65,88,2};
int i,j,k,t;
for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}
for(k=0;k<N;k++)
printf("%d ",a[k]);
return 0;
}

没有语法错误,其他数字都能排序好,就是100这个数字牌不好,请问我的问题出哪里了,谢谢。

------解决方案--------------------
i=0时,j=9,那么j+1=10了越界了,改成j<N-i-1试下
------解决方案--------------------
探讨

i=0时,j=9,那么j+1=10了越界了,改成j<N-i-1试下

------解决方案--------------------
++,就是这种情况,数组溢出了
探讨
i=0时,j=9,那么j+1=10了越界了,改成j<N-i-1试下

------解决方案--------------------
C/C++ code
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)

------解决方案--------------------
for(j = 0; j < N - i; j++)
{
if(a[j] > a[j+1])
{
t = a[j+1];
a[j+1] = a[j];
a[j] = t;
}
}

内部的for循环,当j的值为9时,if语句比较a[9]和a[10],此时a[10]已经是数组越界。
所以a[10]的值是未定义的,很可能是-858993460之类的值,所以a[9]的值大于a[10],
最终a[9]被替换成了一个未定义的值。
------解决方案--------------------
C/C++ code

#include<stdio.h>

#define N 10

int main(void)
{
    int a[N] = {1, 3, 2, -10, -90, 100, 78, 65, 88, 2};
    int i, j, k, t;

    //冒泡排序
    for(i = 0; i < N - 1; i++)
    {
        for(j = 0; j < N - i - 1; j++)
        {
            if(a[j] > a[j+1])
            {
                t = a[j+1];
                a[j+1] = a[j];
                a[j] = t;
            }
        }
    }

    for(k = 0; k < N; k++)
    {
        printf("%d ", a[k]);
    }

    return 0;
}