这个排序算法哪不对啊该怎么处理

这个排序算法哪不对啊
void insertsort(int a[],int n)
{
int i,j,t;
for(i=1;i<=n;i++)
{
t=a[i];
j=i-1;
if(a[i]<a[i-1])
{
while(a[i]<a[j]&&j>=0)  
{
a[j+1]=a[j];
a[j]=t;
j--;
}
}
else
a[j+1]=t;
}  
}
main()
{
int a[11]={0,5,2,9,6,12,7,15,3,8,10},i;
 insertsort(a,10);
 for(i=0;i<=10;i++)
printf("%3d",a[i]);
}

------解决方案--------------------
insert函数中的变量j未初始化
------解决方案--------------------
#include "stdio.h"
void insertsort(int a[],int n)
{
int i,j,t;
for(i=1;i<=n;i++)
{
t=a[i];
j=i-1;
while( j>=0)
{
if(a[j+1]<a[j])
{
a[j+1]=a[j];
a[j]=t;
}
j--;
}
}
}
void main()
{
int a[11]={0,5,2,9,6,12,7,15,3,8,10},i;
 insertsort(a,10);
 for(i=0;i<=10;i++)
printf("%3d",a[i]);
}

------解决方案--------------------
C/C++ code

void InsertSort(int a[], int n)
{
    int i, j, tmp;
    for(i = 1; i < n; i++)
    {
        tmp = a[i];
        for(j = i; j > 0 && tmp < a[j - 1]; j--)
        {
            a[j] = a[j - 1];
        }
        a[j] = tmp;
    }
}

------解决方案--------------------
我修改了下:可以了
void insertsort(int a[],int n)
{
int i,j,t;
for(i=1;i<=n;i++)
{
t=a[i];
j=i-1;
if(a[i]<a[j])
{
while(t<a[j]&&j>=0)
{
a[j+1]=a[j];
--j;
}
a[++j]=t;
}
//else
//a[j+1]=t;
}
}
int main()
{
int a[11]={0,5,2,9,6,12,7,15,3,8,10},i;
insertsort(a,10);
for(i=0;i<=10;i++)
printf("%d\40",a[i]);
return 0;
}