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的numpy模块安装不成功简单解决方法总结
Dec 23 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
python tkinter基本属性详解
Sep 16 Python
30秒学会30个超实用Python代码片段【收藏版】
Oct 15 Python
Python 实现自动导入缺失的库
Oct 29 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
浅谈Pycharm最有必要改的几个默认设置项
Feb 14 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
django rest framework serializers序列化实例
May 13 Python
Python基于locals返回作用域字典
Oct 17 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中的UNICODE 编码与解码
2013/06/29 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
JS去除重复并统计数量的实现方法
2016/12/15 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python设计模式之工厂模式简单示例
2018/01/09 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
windows下python安装pip图文教程
2018/05/25 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
Python类型转换的魔术方法详解
2020/12/23 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
python实现经典排序算法的示例代码
2021/02/07 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
ktv筹备计划书
2014/05/03 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
《迟到》教学反思
2016/02/24 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL