zoukankan      html  css  js  c++  java
  • 希尔排序

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

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

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

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

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

    清华的教材,我才学了几个排序算法,结果都有错。其中,就有这个大名鼎鼎的希尔老先生得啊,难道当年老先生没有留下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:

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

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

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

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

  • 相关阅读:
    Azure 存储简介
    Databricks 第6篇:Spark SQL 维护数据库和表
    Databricks 第5篇:Databricks文件系统(DBFS)
    Databricks 第4篇:pyspark.sql 分组统计和窗口
    IDEA分析JAVA内存溢出和内存泄漏
    Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Connection is broken: "session closed" [90067-200] 解决
    Java 中初始化 List 集合的 8 种方式!
    java list算法问题(给定一 int 数组返回倒序的最大连续递增的区间(至少大于等于2)数组倒序)
    uni-app知识点:页面滚动到指定位置(即锚点实现)、设置背景颜色backgroundColor无效的问题、导航栏设置角标及动态控制修改角标数字
    @Transactional注解为什么不生效
  • 原文地址:https://www.cnblogs.com/woodzcl/p/8037248.html
Copyright © 2011-2022 走看看