Table of Content

The following function is a Shell sort for sorting an array of integers. The basic idea of this sorting algorithm, which was invented in 1959 by D. L. Shell.

The shellsort function is from K&R C, added test driver to verify.

#include <stdio.h>
#include <string.h>

void shellsort(int v[], int n);

/* test shellsort function */
main()
{
    int v1[9] = {4,5,2,1,45,76,23,12,10};

    printf("The original number array: ");
    int i;
    for (i=0; i<9; i++)
            printf(" %d", v1[i]);
    printf("\n");
    shellsort(v1,9);
    printf("The sorted number array: ");
    for (i=0; i<9; i++)
            printf(" %d", v1[i]);
}

/* shellsort:  sort v[0]...v[n-1] into increasing order */
void shellsort(int v[], int n)
{
    int gap, i, j, temp;
    for (gap = n/2; gap > 0; gap /= 2)
        for (i = gap; i < n; i++)
            for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) {
                temp = v[j];
                v[j] = v[j+gap];
                v[j+gap] = temp;
            }
}

test result:

$ shellsort
The original number array:  4 5 2 1 45 76 23 12 10
The sorted number array:  1 2 4 5 10 12 23 45 76