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 相关文章推荐
安装dbus-python的简要教程
May 05 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
python 根据pid杀死相应进程的方法
Jan 16 Python
python自定义异常实例详解
Jul 11 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python中对数据进行各种排序的方法
Jul 02 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
如何在PHP中使用Oracle数据库(6)
2006/10/09 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
flexigrid 参数说明
2010/11/23 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
Python实现list反转实例汇总
2014/11/11 Python
Python实现从百度API获取天气的方法
2015/03/11 Python
python使用opencv读取图片的实例
2017/08/17 Python
使用python3实现操作串口详解
2019/01/01 Python
VSCode中自动为Python文件添加头部注释
2019/11/14 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
应届生英语教师求职信
2013/11/05 职场文书
交通法规咨询中心工作职责
2013/11/27 职场文书
应用英语专业自荐信
2014/01/26 职场文书
商超业务员岗位职责
2014/03/12 职场文书
关于学习的演讲稿
2014/05/10 职场文书
激励员工的口号
2014/06/16 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书