【12,2,16,30,8,128,4,10,20,6,18】按照希尔排序

上面的数字请按照希尔排序,并且有每一步详细的过程,还有它这种算法好在哪里,
不还是要用直接插入排序吗。

写了一个shell排序,把每一步的输出结果打印了一下

#include <stdio.h>

void shell_sort(int array[], int length){
    int i;
    int j;
    int k;
    int gap;
    int temp;
    for(gap=length/2; gap>0; gap=gap/2){
        for(i=0; i<gap; i++){
            for (int ii = 0; ii < length; ii++)
                printf("%d ", array[ii]);
            printf("\n");
            for(j=i+gap; j<length; j=j+gap){
                if(array[j] < array[j - gap]){
                    temp = array[j];
                    k = j - gap;
                    while(k>=0 && array[k]>temp){
                        array[k + gap] = array[k];
                        k = k - gap;
                    }
                    array[k + gap] = temp;
                }
            }
        }
    }
}

int main()
{
    int arr[] = {12,2,16,30,8,128,4,10,20,6,18};
    shell_sort(arr, 11);
    for (int ii = 0; ii < 11; ii++)
        printf("%d ", arr[ii]);
   printf("\n");
   return 0;
}

12 2 16 30 8 128 4 10 20 6 18
12 2 16 30 8 18 4 10 20 6 128
12 2 16 30 8 18 4 10 20 6 128
12 2 10 30 8 18 4 16 20 6 128
12 2 10 20 8 18 4 16 30 6 128
12 2 10 20 6 18 4 16 30 8 128
4 2 6 20 10 18 12 16 30 8 128
4 2 6 8 10 16 12 18 30 20 128
2 4 6 8 10 12 16 18 20 30 128

如果不理解,这里有动画过程,自己看看吧
https://en.wikipedia.org/wiki/Shellsort

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^