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 相关文章推荐
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
Python中使用摄像头实现简单的延时摄影技术
Mar 27 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
深入理解Python中的*重复运算符
Oct 28 Python
python3.5 email实现发送邮件功能
May 22 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python使用while循环花式打印乘法表
Jan 28 Python
Django实现单用户登录的方法示例
Mar 28 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 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
3
2006/10/09 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
2014/05/15 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
详解参数传递四种形式
2015/07/21 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
python将print输出的信息保留到日志文件中
2019/09/27 Python
python实现串口通信的示例代码
2020/02/10 Python
python创建文本文件的简单方法
2020/08/30 Python
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
应急管理培训方案
2014/06/12 职场文书
师德师风的心得体会
2014/09/02 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android