#include #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; }