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中使用__slots__方法的详细教程
Apr 28 Python
python网络编程调用recv函数完整接收数据的三种方法
Mar 31 Python
Python自动发邮件脚本
Mar 31 Python
遗传算法之Python实现代码
Oct 10 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
浅析python协程相关概念
Jan 20 Python
python2与python3共存问题的解决方法
Sep 18 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python实现简单银行管理系统
Oct 25 Python
python正则表达式实例代码
Mar 03 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
Python多线程的退出控制实现
Aug 10 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 归并排序 数组交集
2011/05/10 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
PHP 错误处理机制
2015/07/06 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
2016/10/17 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
javascript的push使用指南
2014/12/05 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
javaScript中indexOf用法技巧
2019/11/26 Javascript
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
django批量导入xml数据
2016/10/16 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
2018/11/21 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
旷课检讨书2000字
2014/01/14 职场文书
客服专员岗位职责
2014/02/28 职场文书
美术指导助理求职信
2014/04/20 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
应收账款管理制度
2015/08/06 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers