#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;
delta[i ++ ] = k;
} while (k>1);
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]) {
t = data[k];
printf("^");
for (j = k - dk; j >= 0 && t < data[j]; j -= dk)
data[j + dk] = data[j];
data[j+dk] = t;
}
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 () {
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;
}