【S-排序】python实现八大排序算法之10-基数排序(RadixSort)

2023-11-06

基数排序

基本思想:
- 基数排序(Radix Sort)是桶排序的扩展,将整数按位数切割成不同的数字,然后按每个位数分别进行了多轮的桶排序。具体实现:从低位开始将待排序的数按照这一位的值放到相应的编号为0~9的桶中。等到低位排完得到一个子序列,再将这个序列按照次低位的大小进入相应的桶中,一直排到最高位为止,数组排序完成。
- 待排序的序列中的值必须是整数而且范围跨度不应太大,否则排序开销太大。例如可以用于学生成绩的排序,因为成绩的范围仅在100以内。

时间复杂度:
- 对于 n 个数值,执行一次分配和收集的时间为O(n)。如果关键字有 d 位,如果关键字有 d 位,则要执行 d 遍。 所以总的运算时间为 O(d*n)。可见不同的基数 r 所用时间是不同的。当 r 或 d 较小时,这种算法较为节省时间。上面讨论的是顺序表的基数排序,这个算法同样也是用与链式的记录排序,只是要求额外附加一下队列的头、尾指针。

基数排序时一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。按照关键字先后顺序,基数排序可以分为高位优先法和低位优先法。
一般来说低位优先法要比高位简单。因为高位优先是分治法思想,对子集按相同方法排序,是一个递归的过程。而低位优先法只要通过x次分配收集操作就可以完成排序,x是取决于关键字的多少

'''
Creat by HuangDandan
2018-08-19
dandanhuang@sjtu.edu.cn

基数排序
基本思想:将整数按位数切割成不同的数字,然后按每个位数分别比较。
步骤:
1-将整数按位数切割成不同的数字,然后按每个位数分别比较。从低位开始将待排序的数按照这一位的值放到相应的编号为0~9的桶中。
2-等到低位排完得到一个子序列,再将这个序列按照次低位的大小进入相应的桶中,一直排到最高位为止,数组排序完成。

编程实现注意点:
0-简单获取列表中最大数值的位数
1-如何按照位数将列表中的数值放入桶中
2-如何依次进行从个位数、十位数、百位数等的操作
将每次放入桶中的值拿出赋给原先的列表
'''

def RadixSort(Lst):
    d = len(str(max(Lst)))                                            #列表中的最大元素的位数
    for i in range(d):                                                #0-9一共10个桶
        BucketLst = [[] for k in range(10)]
        for j in range(len(Lst)):
            BucketLst[Lst[j]//(10**i)%10].append(Lst[j])              #10**i是关注意点,之前一直是10**d,debug才发现
        Lst = [number for B in BucketLst for number in B]             #关键2-依次拿出桶中的元素,给原列表Lst,
                                                                      # 而不是给缓存 temp = [number for B in BucketLst for number in B]

    return Lst


if __name__ == "__main__":
    Lst1 = [1,44,5,222,1]
    print(Lst1)

    print(RadixSort(Lst1))
    #print('------------------------------------')

温故知新:
我在编写程序的时候,没有传入序列中最大值的位数d,而是通过调用python里面内置的函数进行计算,d = len(str(max(Lst))) ,这样本身就会增加程序的时间复杂度。python内置函数求解max(Lst),需要对列表中的所有元素进行遍历,考虑时间复杂度,可以传入d参数~~

参考博客:
https://www.jb51.net/article/123676.htm
https://blog.csdn.net/will130/article/details/45196575
http://www.dwtmy.com/Aboutus.asp?title=%C1%AA%CF%B5%CE%D2%C3%C7
https://www.jianshu.com/p/8f8f19d7b2b9
https://www.cnblogs.com/surgewong/p/3381646.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【S-排序】python实现八大排序算法之10-基数排序(RadixSort) 的相关文章

随机推荐

  • 如何将Python写的代码打包成.exe可执行文件

    有时候我们需要将自己写的代码打包成exe文件 给别人使用需要怎么办呢 以下将讲解Python代码如何打包成 exe文件 1 下载pyinstaller 因为Python中有很多三方包 我们想要这些三方包也包含在里面就需要一个工具 就是pyi
  • ATF(TF-A) RSS-AP接口威胁模型-安全检测与评估

    安全之安全 security 博客目录导读 ATF TF A 威胁模型汇总 目录 一 简介 二 评估目标 1 数据流程图 2 威胁评估 一 简介 本文档是通用TF A威胁模型的扩展 它考虑那些运行时安全子系统 Runtime Securit
  • 情感分类介绍及发展方向

    情感分类 定义 情感分析 对一段文本进行情感识别 分类 按细粒度分 文本级情感分类 判断文章的情感极性 句子级情感分类 判断句子的情感极性 方面级情感分类 判断方面的情感极性 这里的方面指的是表达感情的实体或者实体所属的种类 方面级情感分类
  • (IP地址的计算)判断两个IP是否归属于同一子网

    目录 前言 判断依据 附示例 问题 前言 今天在做题的时候做到了IP地址计算这一部分的题目 太久没有看过了 忘得都差不多了 所以就查阅了资料并做了如下笔记 帮助学习理解 同时把这道题的题目与网友分享的做法分享给大家 可以一起做一做 希望能帮
  • eclipse使用技巧:技巧汇总

    1 F3 转到定义 Alt 方向键 上下左右 Alt 后退 相当于vs里面的Ctrl 2 Alt 或Alt 相当于vs里面的Ctrl K p 3 Ctrl 或Ctrl 注释与反注释的时候要注意了 如果同时取消多行注释 选行要选全 4 ecl
  • error while loading shared libraries: librediscluster.so..: cannot open shared object file: No such

    很纳闷明明设置了环境变量 路径也对 可就是报找不到库 等仔细去看的时候 发现 librediscluster so 这个库多了两点 这种反人性操作真不知作者怎么想的 把librediscluster so 复制成librediscluste
  • 4G时代的语音回落

    原文地址 http ask zealer com post 211 很多小伙伴在享受国内逐步正在建成的4G网络之际可能并不知道 虽然移动通讯网络迈过了这么多年头 用手机打电话这种语音通话范畴之内的事情有单独所谓的传统 语音业务 而浏览网页
  • Devstack部署多节点Openstack(转)

    平台工具介绍 操作系统 Windows7 工具 VirtualBox 5 0 24 镜像 ubuntu 14 04 5 server amd64 iso 下载地址 ubuntu14 04 5 server版 DevStack版本 Mitak
  • 解析逻辑回归模型

    介绍 逻辑回归模型是业界运用最为广泛的模型 我们从下面几个方面讨论这个模型 1 在模型层面上 逻辑回归模型是被用来解决分类问题的 由于分类是一个非线性问题 所以建模的主要难点是如何将非线性问题转化为线性问题 主要从两方面入手 从分解问题的角
  • 如何在Pycharm中安装QT Designer+PyUIC

    如何在Pycharm中安装QT Designer PyUIC 一 安装QT 安装pyqt5 方法一 方法二 安装 pyqt5tools 方法一 方法二 二 指定Qt Designer和PyUIC 添加QtDesigner 添加PyUIC 最
  • 土木人职场受挫该如何破局?转行IT互联网貌似已成首选!

    大学毕业两年 一直在内耗 既不想继续做工程 又不知道出了工地 自己还能做什么 本人毕业于一类院校的建筑环境与能源应用工程专业 通俗的说就是土木工程 进施工单位是大部分土木人的归宿 本科毕业生很多选择去中铁 中建等国企或者央企 在外人看来 国
  • SVN/GIT源代码泄露

    造成SVN源代码漏洞的主要原因是管理员操作不规范 在使用SVN管理本地代码过程中 会自动生成一个名为 svn的隐藏文件夹 其中包含重要的源代码信息 但一些网站管理员在发布代码时 不愿意使用 导出 功能 而是直接复制代码文件夹到WEB服务器上
  • 二进制的概念及运算

    前言 有的朋友觉得写代码做开发应该就是专注于开发出功能 管这些二进制干嘛呢 尤其是做上层开发的朋友 但是当自己出去面试的时候就有可能会碰壁 或者是在看源码的时候就会懵 打个比方我们在看hashmap的源码的时候 并不是每个人都能马上算出这些
  • git使用cherry-pick操作失败,出现CHERRY-PCIKING解决方法

    如果你使用cherry pick出现以下情况 需要撤销这个操作 使用命令 git reset HEAD 1
  • Hive之快速入门

    一 什么是Hive Hive是建立在Hadoop上的数据仓库基础架构 它定义了简单的类SQL查询语句 称为HQL HQL语言也支持用户自定义SQL函数 通过MR任务来处理复杂的分析任务 Hive中包含SQL解析引擎 它会将SQL语句转换成M
  • SPSS多重响应分析案例

    SPSS多重响应分析案例 在市场调查问卷中 总会设计一部分多项选择题 对于多选题 一般采用频数分析 SPSS提供了专门的多选题频数分析统计分析功能 调查问卷 您拥有以下哪些品牌的贵宾卡 1 班尼路 2 真维斯 3 佐丹奴 4 堡师龙 5 苹
  • C# object介绍

    C object介绍 Object类是C 语言仲最原始 最重要得类 是所有类得 祖先 每个C 类都是它得子类 它实现了每个类都必须具有得基本方法 在 Object 类中提供了 4 个常用的方法 即 Equals GetHashCode Ge
  • $(MAKE) -C $(KERNELDIR) M= $(PWD) modules

    转载于 http blog chinaunix net xmlrpc php r blog article uid 29523795 id 4209690 在mini2440资料的LED驱动编程的编译makefile里面看到这样一句话 C是
  • 【华为OD机试 2023】士兵过河(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • 【S-排序】python实现八大排序算法之10-基数排序(RadixSort)

    基数排序 基本思想 基数排序 Radix Sort 是桶排序的扩展 将整数按位数切割成不同的数字 然后按每个位数分别进行了多轮的桶排序 具体实现 从低位开始将待排序的数按照这一位的值放到相应的编号为0 9的桶中 等到低位排完得到一个子序列