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 代码性能优化技巧分享
Aug 07 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
Python爬虫实现爬取百度百科词条功能实例
Apr 05 Python
Django框架封装外部函数示例
May 28 Python
Python计算一个点到所有点的欧式距离实现方法
Jul 04 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python读取大文件越来越慢的原因与解决
Aug 08 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Python对称的二叉树多种思路实现方法
Feb 28 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
Python实现aes加密解密多种方法解析
May 15 Python
Python中的全局变量如何理解
Jun 04 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定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
详解PHP中的PDO类
2015/07/06 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
在javascript中如何得到中英文混合字符串的长度
2014/01/17 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
浅谈javascript中自定义模版
2015/01/29 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
解决bootstrap模态框数据缓存的问题方法
2018/08/10 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
原生js实现简单轮播图
2020/10/26 Javascript
python ip正则式
2009/05/07 Python
小结Python用fork来创建子进程注意事项
2014/07/03 Python
python实现折半查找和归并排序算法
2017/04/14 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
5 个强大的HTML5 API 函数推荐
2014/11/19 HTML / CSS
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
高二地理教学反思
2014/01/24 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
保险公司早会主持词
2014/03/22 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript