void shell_insert(int *a, int n)
{
int gap;
int i;
int temp;
int k;
int j;
for (gap = gap / 2; gap > 0; gap /= 2) //划分步长
{
for (i = 0; i < gap; i++) //每次分组的第一个元素
{
for (j = i + gap; j < n; j += gap) //每一次的插入排序
{
if (a[j] < a[j - gap])
{
temp = a[j];
k = j - gap;
while (k >= 0 && a[k] > temp)
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp;
}
}
}
}
}