希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

希尔排序的核心是对步长的理解,步长是进行相对比较的两个元素之间的距离,随着步长的减小,相对元素的大小会逐步区分出来并向两端聚拢,当步长为1的时候,就完成最后一次比较,那么序列顺序就出来了。

image

如上面实例:第一次排序步长为5,那么需要比较的元素对为:9-4 1-8 2-6 5-3 7-5,只需要将这几组元素比比较并交换位置;然后开始第二轮的比较。

def shell_sort(items):

"""

希尔排序

:param items:

:return:

"""

n = len(items)

step = n // 2

while step > 0:

for cur in range(step, n):

i = cur

while i >= step and items[i-step] > items[i]:

items[i - step], items[i] = items[i], items[i-step]

i -= step

step = step // 2

不需要大量的辅助空间,和归并排序一样容易实现。希尔排序是基于插入排序的一种算法,在此算法基础之上增加了一个新的特性,提高了效率。希尔排序没有快速排序算法快,因此中等大小规模数据排序中表现良好,对规模非常大的数据排序不是最优选择。

希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差,几乎任何排序工作在开始时都可以用希尔排序,本质上讲,希尔排序算法是直接插入排序算法的一种改进,减少了其复制的次数,速度要快很多。

image

python实现希尔排序算法_python实现希尔排序算法相关推荐

  1. python实现排序算法_python实现各种排序算法

    冒泡排序 """ 分析 1. 算法是一种与语言无关的东西,更确切地说就算解决问题的思路,就是一个通用的思想的问题 2. 冒泡算法作为最简单的一种排序算法,我们的关注点不应 ...

  2. python的十大算法_Python十大排序算法

    代码如下: 快排 ''' 几乎是我们学习排序入门算法了,两次遍历,时间复杂度较高n*n,稳定排序 ''' def bubbleSort(tmpList): for i in range(len(tmp ...

  3. python二分之紧凑形式_python实现二分查找算法

    介绍 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 前提 必须待查找的序列有序 时间复杂 ...

  4. python数圈算法_Python实现随机爬山算法

    随机爬山是一种优化算法.它利用随机性作为搜索过程的一部分.这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行.它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局 ...

  5. pythonopencv算法_python opencv之SURF算法示例

    本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要 ...

  6. python寻峰算法_python/scipy的寻峰算法

    我可以自己写一些东西,通过找到一阶导数的零交叉点或其他东西,但它似乎是一个足够通用的函数,可以包含在标准库中.有人知道吗? 我的特殊应用是一个二维数组,但通常它会用于在FFT等中查找峰值. 具体地说, ...

  7. python实现堆排序算法_Python实现的堆排序算法示例

    本文实例讲述了Python实现的堆排序算法.分享给大家供大家参考,具体如下: 堆排序的思想:堆是一种数据结构,可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右 ...

  8. python字典排序方法_Python字典的排序方法一则

    今天需要对Python的字典进行排序,以获得有效的时间序列,采用了如下方法: 首先生成一个示例字典: >>> range_a = random.sample(range(0, 10) ...

  9. python决策树id3算法_python实现决策树ID3算法

    一.决策树概论 决策树是根据训练数据集,按属性跟类型,构建一棵树形结构.可以按照这棵树的结构,对测试数据进行分类.同时决策树也可以用来处理预测问题(回归). 二.决策树ID3的原理 有多种类型的决策树 ...

最新文章

  1. sql sum条件求和_SQL进阶7外连接(outer join)
  2. cath数据库fasta备注_数据库(同源)搜索软件 FASTA 和 BLAST
  3. sh: lmstat: 没有那个文件或目录_没有天生的合适,只有磨合出来的感情
  4. 日历控件源码开放--适用于ASP.NET 1.1
  5. window.open不重复打开同一个名称的窗口_干货满满|Ctrl键的正确打开方式
  6. proxmox集群节点崩溃处理
  7. android打不开,android加入权限应用打不开
  8. 一休自评应聘:我是如何进入51CTO的?
  9. python怎么隐藏输入法,隐藏输入法和弹出输入法
  10. memset()详解
  11. RENIX软件OSPF和BFD、ISIS和BFD联动测试——网络测试仪实操
  12. midas显示代理服务器错误,midas运行后出错大神帮忙看看哪错了
  13. 学习C++程序设计需要什么基础
  14. KeyTool 和 OpenSSL 相互转换 [转]
  15. Matplotlib学习手册A005_Figure的add_axes()方法
  16. 保存地理坐标信息的SLIC分割结果
  17. Sms开源短信及消息转发器,不仅只转发短信,备用机必备神器
  18. 贴片电阻常规尺寸及功率
  19. Hanselminutes播客153-Scott的妻子Mo采访Scott Hanselman
  20. 我的镜头观,尼康如何搭配镜头(!!强烈推荐!!) 转贴

热门文章

  1. java 正则表达式 电话_Java-12正则表达式验证电话号码
  2. mySQL首行缩进快捷键_html首行缩进、悬停效果
  3. Redis高可用--持久化
  4. unity绘制管道_Unity2020 Paint Holes画洞工具制作游戏洞穴场景流程
  5. 倍福--轴耦合的操作方法
  6. 刷题周记(九)——#状压DP:最短Hamilton路径、小国王(互不侵犯)、玉米田(Corn Fields G)、愤怒的小鸟、吃奶酪、炮兵阵地、宝藏 #区间DP:清空字符串#DP:关灯问题II
  7. 大数据岗位校招Spark面试总结
  8. 建议新手用3Dmax,那到底学好3Dmax要多久呢?
  9. 类,对象,方法与函数的区别
  10. 类方法和对象方法的区别