C语言希尔排序,求解答

void xier(int a[ ], int n)
{
int len, temp, i,j;
len = n/2;
while(len >= 1)
{
for(i = len; i <= n; i++)
{
temp = a[i];
j = i - len;
while(temp < a[j]&&j >= 0)
{
a[j+d] = a[j];//为什么a[i] = a[j]不行。
//是因为数组作为形参传递的原因的吗???
j = j - len;
}
a[j + len] = temp;
}
len = len/2;
}
}


看看可视化的图更理解