编辑代码

#include <stdio.h>

void shellsort(int data[], int n)
{
    int *delta, k, i, t, dk, j;
    k = n;
    delta = (int *) malloc(sizeof(int) * (n / 2));
    i = 0;
    do {
        k = k/2;//(1);
        delta[i ++ ] = k;
    } while (k>1);//(2)
    printf("步长:");
    show(delta, i);
    i = 0;
    while ((dk = delta[i]) > 0) {
        printf("%d-%d: ", i, dk);
        for (k = delta[i]; k < n; ++ k){
            printf(" %d[%d-%d", k, data[k-dk] , data[k]);
            if (data[k-dk] > data[k]) {//(3)
                t = data[k];
                printf("^");
                for (j = k - dk; j >= 0 && t < data[j]; j -= dk)
                    data[j + dk] = data[j];
                data[j+dk] = t;//(4);
            }
            printf("]");
        }
        ++ i;
        printf("\n%d趟:", i);
        show(data, n);
    }
}
void show(int data[], int n){
    int i;
    for(i = 0; i < n; i++){
        printf("%d,",data[i]);
    }
    printf("\n");
}
int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    printf("希尔排序!     - c.jsrun.net.\n");
    int arr[] = {48,37,64,96,75,12,26,48,54,03};
    printf("排序前:");
    show(arr, 10);
    shellsort(arr, 10);
    printf("排序后:");
    show(arr, 10);
    return 0;
}