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利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
Python提取网页中超链接的方法
Sep 18 Python
Python中字典的setdefault()方法教程
Feb 07 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
Django异步任务之Celery的基本使用
Mar 23 Python
Python用Try语句捕获异常的实例方法
Jun 26 Python
Pandas DataFrame中的tuple元素遍历的实现
Oct 23 Python
Python %r和%s区别代码实例解析
Apr 03 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
Python标准库之typing的用法(类型标注)
Jun 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
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
Zend Framework缓存Cache用法简单实例
2016/03/19 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
基于ant design日期控件使用_仅月份的操作
2020/10/27 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
简介Django框架中可使用的各类缓存
2015/07/23 Python
python 系统调用的实例详解
2017/07/11 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python随机函数random()使用方法小结
2018/04/29 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
django一对多模型以及如何在前端实现详解
2019/07/24 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
毕业生机械建模求职信
2013/10/14 职场文书
自主招生自荐书
2013/11/29 职场文书
致裁判员加油稿
2014/02/08 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
会计出纳岗位职责
2015/03/31 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python