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 相关文章推荐
Python3.x中自定义比较函数
Apr 24 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python类的继承和多态代码详解
Dec 27 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
Python基础知识点 初识Python.md
May 14 Python
python 字典操作提取key,value的方法
Jun 26 Python
python脚本开机自启的实现方法
Jun 28 Python
详解Django配置优化方法
Nov 18 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
python绘图模块之利用turtle画图
Feb 12 Python
PyTorch中permute的使用方法
Apr 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中路径问题的解决方案
2006/10/09 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
php简单生成随机数的方法
2015/07/30 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python中的index()方法使用教程
2015/05/18 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
SVM基本概念及Python实现代码
2017/12/27 Python
python join方法使用详解
2019/07/30 Python
Python @property原理解析和用法实例
2020/02/11 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
化工工艺专业求职信
2013/09/22 职场文书
求职信名称怎么写
2014/05/26 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
现实表现材料范文
2014/12/23 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android