精华内容
下载资源
问答
  • 思路形象记忆: 代码实现要注意的地方 考虑极端情况; gap要记得int一下; 只要j小于gap,说明还可以向左走,所以j>=gap; 只要arr[j-gap]>tmp,说明需要向左走; 不是排完一个逻辑分组才去排另外一个,而是...
    希尔排序思想

    有点类似归并可以分为两步:
    (1)拆分; (2) 排序。并且不断重复这两个步骤。

    1. 拆分:gap将数据拆成一个个小的逻辑小组,并且gap不断减少。一开始每个组最多只有2个元素,最后慢慢变成整体数据的一半,然后变成整体。而gap从一开始的int(len/2)最后变为2.
    2. 排序:对每个小组进行插入排序。

    思路形象记忆:
    其实就升级版插入排序,插入排序适用于小规模或基本有序,希尔排序融入分治的思想,用一个个小的插入排序去解决大规模、无序的问题。

    代码实现要注意的地方
    1. 考虑极端情况;
    2. gap要记得int一下;
    3. 只要j小于gap,说明还可以向左走,所以j>=gap
    4. 只要arr[j-gap]>tmp,说明需要向左走;
    5. 不是排完一个逻辑分组才去排另外一个,而是同时的。每一组每组都优化一个数;
    6. 特点:其实就是在插入排序上多一个while循环判断gap。三个循环都与gap有关。
      while gap>0判断gap是否需要继续减半。
      for i in range(gap, arr_len)相当于选中插入排序时,准备插队的那个未排序数,而且这个i的特点是,轮流指向不同的逻辑分组,例如假设长度为8,gap=2时,此时有两个逻辑分组,i会分别取2,3,4,5,6,7。当i=2,4,6时,其实是对第一个逻辑分组进行插入排序(位置0即为第一个逻辑分组中默认已排序的初始值);当i=3,5,7时,其实是对第一个逻辑分组进行插入排序(位置1即为第二个逻辑分组中默认已排序的初始值)。
      while j>=gap and arr[j-gap]>tmp就是插入排序。j的判断值其实就是下面arr[j] = arr[j-gap]中后面的变量arr[j-gap]索引大于等于0的条件,即j-gap>=0,故j>=gap。(在插入排序中为j>=0,因为插入排序中赋值的时候是arr[j+1] = arr[j],其实本质是一样的。插入排序代码
    代码
    def shell_sort(arr):
    
        # 排序初始值
        arr_len = len(arr)
        gap = int(arr_len/2)
    
        # 特殊情况考虑
        if arr_len==0:
            return None
        if arr_len==1:
            return arr
    
        # 只要增量未减为0,则继续
        while gap>0:
            for i in range(gap, arr_len):
                tmp = arr[i]
                j=i
                # 单组插入排序
                # 只要j小于gap,说明还可以向左走
                # 只要arr[j-gap]>tmp,说明需要向左走
                while j>=gap and arr[j-gap]>tmp:
                    # 比tmp大的值右移
                    arr[j] = arr[j-gap]
                    # j减少增量值
                    j -= gap
                # 若找到最佳位置,则插入
                # 因为一旦j大于gap则说明已经是最左边的数了,所以最佳位置就是j
                arr[j] = tmp
            # 每个逻辑分组都排序后,gap减半
            gap = int(gap/2)
    
        return arr
    
    arr = [3,2,1,5,6,5]
    shell_sort(arr)
    print(arr)
    

    参考:希尔排序–简单易懂图解

    展开全文
  • python入门与学习方法精确思维与用到才能记忆深刻课程简介课前介绍计算机简介与硬盘概念内存作用计算机小结编程语言简介操作系统简介python版本简介切换python版本修改环境变量交互式编程两种风格python3代码保存...
  • 易佳工艺软件

    热门讨论 2012-04-11 19:56:57
    1. 输入法记忆功能,在尺寸编辑器中,尺寸名称的输入法具有记忆功能。 2010/1/10 11.0.3.0 1. 夹条文字上有乱码。 2010/1/10 10.9.9.1 1. 码号之间切换速度慢的问题。 2010 新年快乐! 2009/12/30 10.9.8.4 1....
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 抽样量化编码器 157 ...
  • 实例037 foreach循环优于for循环 实例038 终止循环体 实例039 循环体的过滤器 实例040 循环的极限 2.5 常用排序 实例041 冒泡排序法 实例042 快速排序法 实例043 选择排序法 实例044 插入排序法 实例045 ...
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 ...
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 ...
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 ...
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 ...
  • 5.5.6 无记忆非线性模块 149 第6章 信源编码 153 6.1 压缩和扩展 153 6.1.1 A律压缩模块 153 6.1.2 A律扩展模块 154 6.1.3 μ律压缩模块 155 6.1.4 μ律扩展模块 156 6.2 量化和编码 157 6.2.1 ...
  • 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动控件 141 实例...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动控件 141 ...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动控件 141 ...
  • 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动控件 141 ...
  • 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动控件 141 ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例178 带记忆功能的MP3播放器 254 实例179 自动播放的MP3播放器 257 实例180 学校体操定时音乐播放 258 实例181 播放系统自带的事件声音 259 实例182 获取MP3文件的歌词 260 实例183 M3U文件的...
  • 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动...
  • 实例094 多控件的焦点循环移动 136 实例095 动态创建控件 138 实例096 在Button按钮上绘图 138 2.11 焦点变换与输入控制 140 实例097 按回车键焦点在控件中移动的录入窗口 140 实例098 程序运行时拖动...
  • 实例048 程序在循环中响应界面操作 57 实例049 使用任意组件拖动窗体 58 实例050 动态创建窗体和释放窗体 59 实例051 修改提示字体及颜色 60 1.14 其他技术 61 实例052 窗口融合技术 61 实例053 给MDI...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0232 设计带记忆的数据录入窗口 154 0233 在窗体关闭时提示有未保存的数据 155 0234 设置只允许3次密码错误 156 0235 如何读取Word中的文本 156 0236 通过身份证号获取年龄 157 0237 如何实现一个应用...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    2.12.3 记忆标记 59 2.12.4 折叠方法 60 2.13 针对发布进行构建 60 2.14 清除构建 61 2.14.1 针对App Store进行编译 62 2.14.2 调试App Store上传 63 2.15 针对临时发布进行构建 64 2.15.1 注册设备 64 ...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    16 <br>0033 Return语句的使用 17 <br>0034 如何实现无限循环 17 <br>0035 巧用foreach语句控制控件 18 <br>0036 有效使用switch case语句 18 <br>2.3 运算符 19 <br>0037 如何使用...
  • php高级开发教程说明

    2008-11-27 11:39:22
    这个循环也许用不了1 0 0行代码,但是为一个优化的循环选择设计一个优化的算法很容易耗费一 整天的时间,这个小小的循环也许是设计阶段最庞大的部分,但另一方面,你可以在不到一天 的时间内策划好数千行的代码。 ...
  • 修改集成开发环境,自动记忆非独立编译时是否写出依赖文件的选项。 6. 大幅提高编译速度。 对其它支持库的更新: 1. 修改高级表格支持库,在双击单元格进入编辑状态后,不能收到第一个“字符输入”事件的BUG。 ...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

循环分组记忆