张大同AA 2019-02-14 22:07 采纳率: 60%
浏览 1238
已采纳

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

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

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-02-14 23:11
    关注

    写了一个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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏