#include <stdio.h>
void shell_sort (int *a, int len);
void swap (int *a, int i, int j);
void print (int *a, int len);
int main (void)
{
int a[] = {3, 0, 2, 4, 8, 7, 1, 5};
int len = sizeof (a) / sizeof (a[0]);
print (a, len);
shell_sort (a, len);
print (a, len);
return 0;
}
void shell_sort (int *a, int len)
{
int gap = len / 2;
int i, j, k, temp;
for (; gap > 0; gap /= 2)//排序间隔依次变小,直到变为1
{
for (i=gap; i < 2 * gap; i++)//每组数进行插入排序
{
for (j=i; j<len; j += gap)
{
k = j-gap;
temp = a[j];
while (a[k] > temp && k >= 0)
{
a[k+gap] = a[k];
k -= gap;
}
a[k+gap] = temp;
}
}
}
}
void swap (int *a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void print (int *a, int len)
{
int i;
for (i=0; i<len; i++)
{
printf ("%d ", a[i]);
}
printf ("\n\n");
}