#include <stdio.h>
#define ARR_SIZE(X) (sizeof(X)/sizeof(X[0]))
void print_array(int array[], int len);
void shell_sort(int array[], int len);
void swap(int *to, int *from);
int main(void)
{
int array[] = {4, 2, 1, 7, 8, 9, 6, 0, 3, 5};
print_array(array, sizeof(array)/sizeof(int));
shell_sort(array, sizeof(array)/sizeof(array[0]));
print_array(array, sizeof(array)/sizeof(int));
return 0;
}
void print_array(int array[], int len)
{
while (len--)
printf((!len) ? "%d\n" : "%d, ", *array++);
}
void shell_sort(int array[], int len)
{
int gap, i, j;
for (gap = len/2; gap > 0; gap /= 2)
for (i = gap; i < len; ++i)
for (j = i - gap; j >= 0 && array[j] >= array[j+gap];
j -= gap)
swap(array + j, array + j + gap);
}
void swap(int *to, int *from)
{
int buff = *to;
*to = *from;
*from = buff;
}