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生成pdf文件的方法
Aug 04 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
详解python时间模块中的datetime模块
Jan 13 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
python实现文字版扫雷
Apr 24 Python
django 将自带的数据库sqlite3改成mysql实例
Jul 09 Python
解决Python安装cryptography报错问题
Sep 03 Python
python 解决微分方程的操作(数值解法)
May 26 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+mysql)
2007/11/23 PHP
解析PHP提交后跳转
2013/06/23 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python实用日期时间处理方法汇总
2015/05/09 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python hash每次调用结果不同的原因
2019/11/21 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
2020/10/15 Python
JDO的含义
2012/11/17 面试题
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
EJB的基本架构
2016/09/22 面试题
入学生会自荐书范文
2014/02/05 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
2014年营业员工作总结
2014/11/18 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书