使用python实现希尔、计数、基数基础排序的代码


Posted in Python onDecember 25, 2019

希尔排序

希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。

首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为d1,在各组内进行直接插入排序。

取第二个整数d2=d1//2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。

希尔排序是使整体数据越来越接近有序;最后一趟排序使得所有数据有序。

使用python实现希尔、计数、基数基础排序的代码

实现

# 希尔排序
def shell_sort(li):
  n = len(li)
  gap = n // 2
  while gap > 0:
    for i in range(gap, n):
      temp = li[i]
      j = i - gap
      while j >= 0 and li[j] > temp:
        li[j + gap] = li[j]
        j -= gap
      li[j + gap] = temp

    gap //= 2

算法分析

  • 时间复杂度:O(n1.3)
  • 最好时间复杂度:O(n)
  • 最坏时间复杂度:O(n2)
  • 空间复杂度:O(1)
  • 稳定性:不稳定

计数排序

计数排序是一种非比较性质的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。
计数排序过程中不存在元素之间的比较和交换操作,根据元素本身的值,将每个元素出现的次数记录到辅助空间后,通过对辅助空间内数据的计算,即可确定每一个元素最终的位置。

  1. 根据待排序集合中最大元素和最小元素的差值范围,申请额外空间;
  2. 遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内;
  3. 对额外空间内数据进行计算,得出每一个元素的正确位置;
  4. 将待排序集合每一个元素移动到计算得出的正确位置上。

使用python实现希尔、计数、基数基础排序的代码

实现

def count_sort(li, max_num=100):
  count = [0 for _ in range(max_num + 1)]

  for val in li:
    count[val] += 1
  li.clear()
  # 表示i这个数出现了v次
  for i, v in enumerate(count):
    for _ in range(v):
      li.append(i)

算法分析

假定原始数列的规模是N

最大值和最小值的差是M

计数排序的时间复杂度是O(N+M)

如果不考虑结果数组,只考虑中间数组大小的话,空间复杂度是O(M)

基数排序

基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。

由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

多关键字排序:现在有一个员工,要求按照薪资排序,年龄相同的员工按照按照年龄排序。

先按照年龄进行排序,再按照薪资进行稳定的排序。

对32,13,94,52,17,54,93进行排序,是否可以看作多关键字排序?

使用python实现希尔、计数、基数基础排序的代码

实现

# 基数排序
def radix_sort(li):
  max_num = max(li)
  i = 0
  while (10 ** i <= max_num):
    buckets = [[] for _ in range(10)]
    for val in li:
      # i=0 个位 i=1 十位 i=2 百位 ..
      digit = val // (10**i) % 10
      buckets[digit].append(val)
    li.clear()
    for bucket in buckets:
      for val in bucket:
        li.append(val)
    i += 1

算法分析

  • 时间复杂度:O(kn)
  • 最好时间复杂度:O(kn)
  • 最坏时间复杂度:O(kn)
  • 空间复杂度:O(n+k)
  • 稳定性:稳定

总结

以上所述是小编给大家介绍的使用python实现希尔、计数、基数基础排序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
Python2随机数列生成器简单实例
Sep 04 Python
简单实现python收发邮件功能
Jan 05 Python
python操作excel的方法
Aug 16 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
Python数据可视化:幂律分布实例详解
Dec 07 Python
Python函数参数分类原理详解
May 28 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Python Pandas数据分析之iloc和loc的用法详解
Nov 11 Python
Python之Class&amp;Object用法详解
Dec 25 #Python
python shutil文件操作工具使用实例分析
Dec 25 #Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 #Python
如何基于python测量代码运行时间
Dec 25 #Python
python字典setdefault方法和get方法使用实例
Dec 25 #Python
Python 内置变量和函数的查看及说明介绍
Dec 25 #Python
python @propert装饰器使用方法原理解析
Dec 25 #Python
You might like
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
解析CI的AJAX分页 另类实现方法
2013/06/27 PHP
php自定义apk安装包实例
2014/10/20 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
php写app用的框架整理
2019/09/29 PHP
javascript 跳转代码集合
2009/12/03 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
基于javascript实现的快速排序
2016/12/02 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
python重试装饰器示例
2014/02/11 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
tornado+celery的简单使用详解
2019/12/21 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
网上商城创业计划书范文
2014/01/31 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
门卫管理制度范本
2015/08/05 职场文书
如何撰写促销方案?
2019/07/05 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python