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实现带声音的摩斯码翻译实现方法
May 20 Python
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
Python pandas.DataFrame 找出有空值的行
Sep 09 Python
YUV转为jpg图像的实现
Dec 09 Python
opencv设置采集视频分辨率方式
Dec 10 Python
python属于哪种语言
Aug 16 Python
通过Python pyecharts输出保存图片代码实例
Nov 25 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
动态新闻发布的实现及其技巧
2006/10/09 PHP
PHP 的几个配置文件函数
2006/12/21 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
php生成zip文件类实例
2015/04/07 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
JQuery教学之性能优化
2014/05/14 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
AngularJS基础 ng-csp 指令详解
2016/08/01 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
2020/02/11 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
numpy中的高维数组转置实例
2018/04/17 Python
Python删除n行后的其他行方法
2019/01/28 Python
python 自动批量打开网页的示例
2019/02/21 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
顶撞领导检讨书
2014/01/29 职场文书
优秀小学生家长评语
2014/01/30 职场文书
演讲稿开场白台词
2014/08/25 职场文书
医德考评自我评价
2014/09/14 职场文书
合作协议书格式范本
2016/03/21 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
配置Kubernetes外网访问集群
2022/03/31 Servers