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 多线程应用介绍
Dec 19 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
python批量实现Word文件转换为PDF文件
Mar 15 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
python单例模式实例解析
Aug 28 Python
对python以16进制打印字节数组的方法详解
Jan 24 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
python代码编写计算器小程序
Mar 30 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
python 默认参数相关知识详解
Sep 18 Python
用Python实现职工信息管理系统
Dec 30 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
pandas 层次化索引的实现方法
2019/07/06 Python
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
vue实现倒计时功能
2021/03/24 Vue.js
计算机网络专业个人的自我评价
2013/10/17 职场文书
关于工资低的辞职信
2014/01/14 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
主题党日活动总结
2014/07/08 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
买卖合同纠纷代理词
2015/05/25 职场文书
借钱欠条怎么写
2015/07/03 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
Python经常使用的一些内置函数
2022/04/11 Python