直接插入排序解决方案

直接插入排序
小菜求助,能不能帮我看下这个代码的错误,代码是随机产生一组数,对其进行排序,我用的直接插入排序思想,递归了一下,实在找不到哪错了。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void dfas(int *a){
int i,j,b[6]={0};
for(j=1;j<=5;j++){
for(i=1;i<=5;i++)
if(a[i]>a[i+1]){
b[0]=a[i];
b[i]=a[i+1];
b[i+1]=a[i];
}
else
b[i]=a[i];
dfas(b);
}
for(i=1;i<6;i++)
printf("%5d",b[i]);
}
void main(){
int i,a[5];
printf("输出的数组为:");
srand(time(0));
for(i=1;i<=5;i++){
a[i]=rand()%100;
printf("%5d",a[i]);
}
printf("\n");
dfas(a);
}
------解决思路----------------------
数组的下标是从0开始的~~

for(i=0;i<5;i++){
a[i]=rand()%100;
printf("%5d",a[i]);
}
printf("\n");

------解决思路----------------------
给LZ分享一个链接,这篇博文讲了多种排序算法:http://blog.****.net/hguisu/article/details/7776068
------解决思路----------------------

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

void dfas(int a[],int n)
//待排序元素用一个数组a表示,数组有n个元素

int i,j;
int t;
for(i=1;i<n;i++) //i表示插入次数,共进行n-1次插入

t=a[i]; //把待排序元素赋给t
j=i-1;
while ((j>=0) && (t<a[j]))
{  
a[j+1]=a[j]; 
j--; 
} // 顺序比较和移动
a[j+1]=t;
}

/*
for(i=0;i<5;i++)
printf("%5d",a[i]);
putchar(10);  //回车
*/
}

void main()
{
int i,a[5];
srand(time(0));

for(i=0;i<5;i++)  //数组是以下标0开始,而不是1
{
a[i]=rand()%100;
printf("%5d",a[i]);
}
printf("\n after sort========================\n");
dfas(a,5);
for(i=0;i<5;i++)
{
printf("%5d",a[i]);
}
putchar(10);  //回车