• 希尔排序


    最近被算法虐了,所以,有事没事,我就得找找算法的茬!嘿嘿

    话说,突然想起以前上学时,老师教过一个叫做希尔排序的算法。

    主要是名字很有魅惑力啊,依稀记得似乎又不是什么重点排序法,但它就牛在,古往今来,所有算法的设计者都是线性思维的套路时,这个叫希尔的人在中间加了一个叫做不连续增量的概念。估计,就凭这点,这个不怎么样的算法总是被任何算法教材和任何算法老师拿来说说,但都是点到为止,因为从时间复杂度上看,它也却是就这么回事。

    不是说找茬吗,嘿嘿,接着说啊:想着重新学学吧,那得买本书!对,就这么干,千挑万选,最后还是相信大品牌,清华本科生教材,名厂名牌,值得信赖?

    错了,今天的茬就是“清华”,哈哈,情节跳跃有点儿大,请别介意。

    清华的教材,我才学了几个排序算法,结果都有错。其中,就有这个大名鼎鼎的希尔老先生得啊,难道当年老先生没有留下demo?所以,现在全要靠清华的老师自己补充吗?

    ————————————

    闲话不聊,如果,你也想学希尔排序,那我给你一个,保证无错误的版本。

    //sort.c

    #include <stdio.h>

    #include <stdlib.h>

    #include <string.h>

    void insertsort_gap(int arr[], int len,  int start, int gap)

    {

        int temp, i, j;

        for(i=start+gap; i<len; i+=gap)

        {

            if (arr[i-gap]>arr[i])

            {

                temp = arr[i];

                j = i;

                do

                {

                    arr[j] = arr[j-gap];

                    j -= gap;

                }

                while(j-gap>=0&&arr[j-gap]>temp);

                arr[j] = temp;

            }

        }

    }

    void shellsort(int arr[], int len, int delta[], int m)

    {

        int i, start, gap;

        for(i=m-1; i>=0; i--)

        {

            gap = delta[i];

            for(start=0; start<gap; start++)

            {

                insertsort_gap(arr, len, start, gap);

            }

        }

    }

    void main()

    {

        int arr[] = {22, 13, 17, 29, 46, 58, 11, 1, 8, 9, 76};

        int len = sizeof(arr)/sizeof(int);

        int delta[] = {4, 2, 1};

        int m = sizeof(delta)/sizeof(int);

        shellsort(arr, len, delta, m);

        for(int i=0; i<len; i++)

        {

            printf("%d ", arr[i]);

        }

        printf(" ");

    }

    //result

    # ./sort
    1 8 9 11 13 17 22 29 46 58 76

    Finally:

    我们国家基础本来就弱,碰到清华这么牛的学校既然还在误导学生,情以何堪?

    别深想,其实,我也不过就在找茬而已。

    最近被算法和人都虐了,对人对事都有点儿敌对情绪了。

    哎,这样不好,我得改啊。哈哈

  • 相关阅读:
    python 模拟浏览器
    转:如何评价架构的优劣
    转:DotNET企业架构应用实践架构师成长之路如何成为优秀架构师
    转:大规模网站架构实战之体系结构(一)
    转:Twitter的设计原则
    转:关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
    转:我眼中的Visual Studio 2010架构工具
    转:解剖Twitter
    转:Discuz!NT前台模型架构(MVC)
    转: "HTTP 错误 401.1 未经授权:访问由于凭据无效被拒绝"的另类解决方案
  • 原文地址:https://www.cnblogs.com/woodzcl/p/8037248.html
Copyright © 2020-2023  润新知