希尔排序,该如何解决

希尔排序
#include<stdio.h>
void main()
{
int a[10]={64,74,34,98,12,53,68,35,42,23};
int i,j,k,m;
//希尔排序
    k=5;
while(k>0)
{
for(i=k;i<10;i++)
{
j=i-k;
while(j>=0)
{
if(a[j]>a[j+k])
{
m=a[j];
a[j]=a[j+k];
a[j+k]=m;
}
else break;
}
}
k/=2;
}
printf("排序后的数为:\n");

for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("\n");
}
这个程序哪里错了,排序不正确,为什么
------解决思路----------------------
for(i=k;i<10;i++)里面的j不象插入排序了, 改成这样试试

           j=i-k;
            int x=a[i];
            while(j>=0&&a[j]>x)
            {
                a[j+k] =a[j];
                j-=k;
            }
            a[j+k]=x;

------解决思路----------------------
边调试便答应结果看