Python实现希尔排序算法的原理与用法实例分析


Posted in Python onNovember 23, 2017

本文实例讲述了Python实现希尔排序算法的原理与用法。分享给大家供大家参考,具体如下:

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。

希尔排序的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。(插入排序可参考前面一篇Python插入排序算法)

Python实现代码如下:

#-*- coding: UTF-8 -*-
import numpy as np
def ShellSort(a):
  gap = a.size / 2
  while gap >= 1:
    for i in xrange(gap,a.size, gap):
      for j in xrange(i,0, -gap):
        if a[j-gap] > a[j]:
          a[j-gap] , a[j] = a[j], a[j-gap]
        else:
          break
    gap /= 2
if __name__ == '__main__':
  a = np.random.randint(0, 10, size = 10)
  print "Before sorting..."
  print "---------------------------------------------------------------"
  print a
  print "---------------------------------------------------------------"
  ShellSort(a)
  print "After sorting..."
  print "---------------------------------------------------------------"
  print a
  print "---------------------------------------------------------------"

运行结果:

Python实现希尔排序算法的原理与用法实例分析

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
详解python的ORM中Pony用法
Feb 09 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
简单了解python数组的基本操作
Nov 26 Python
django中的数据库迁移的实现
Mar 16 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 #Python
Python3 伪装浏览器的方法示例
Nov 23 #Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 #Python
python数字图像处理之高级滤波代码详解
Nov 23 #Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 #Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 #Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 #Python
You might like
PHP 数组入门教程小结
2009/05/20 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP学习笔记之session
2018/05/06 PHP
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
Bootstrap每天必学之标签与徽章
2015/11/27 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
javascript简单实现等比例缩小图片的方法
2016/07/27 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
2020/09/21 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python性能优化技巧
2015/03/09 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
python列表返回重复数据的下标
2020/02/10 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
java字符串格式化输出实例讲解
2021/01/06 Python
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
事业单位绩效考核实施方案
2014/03/27 职场文书
九一八事变演讲稿
2014/09/05 职场文书
学期个人工作总结
2015/02/13 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python
python字符串拼接.join()和拆分.split()详解
2021/11/23 Python