基数排序(Radix Sort)-- 特殊排序算法

2023-11-13

1 基数排序(Radix Sort)

基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。

算法描述

  • 取得数组中的最大数,并取得位数;
  • arr为原始数组,从最低位开始取每个位组成radix数组;
  • 对radix进行计数排序(利用计数排序适用于小范围数的特点)

动图演示
在这里插入图片描述

代码实现

def Radix_sort(nums):
    if not nums: return []
    _max = max(nums)
    # 最大位数
    maxDigit = len(str(_max))
    bucketList = [[] for _ in range(10)]
    # 从低位开始排序
    div, mod = 1, 10
    for i in range(maxDigit):
        for num in nums:
            bucketList[num % mod // div].append(num)
        div *= 10
        mod *= 10
        idx = 0
        for j in range(10):
            for item in bucketList[j]:
                nums[idx] = item
                idx += 1
            bucketList[j] = []
    return nums

算法特性

  • 时间复杂度(最好): O ( n ∗ k ) O(n*k) O(nk)
  • 时间复杂度(最坏): O ( n ∗ k ) O(n*k) O(nk)
  • 时间复杂度(平均): O ( n ∗ k ) O(n*k) O(nk)
  • 空间复杂度: O ( n + k ) O(n+k) O(n+k)
  • 稳定性:稳定

基数排序基于分别排序,分别收集,所以是稳定的。但基数排序的性能比桶排序要略差,每一次关键字的桶分配都需要O(n)的时间复杂度,而且分配之后得到新的关键字序列又需要O(n)的时间复杂度。假如待排数据可以分为d个关键字,则基数排序的时间复杂度将是 O ( d ∗ 2 n ) O(d* 2n) O(d2n) ,当然d要远远小于n,因此基本上还是线性级别的。基数排序的空间复杂度为 O ( n + k ) O(n+k) O(n+k),其中k为桶的数量。一般来说n>>k,因此额外空间需要大概n个左右。

参考资料

十大经典排序算法(动图演示)

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

基数排序(Radix Sort)-- 特殊排序算法 的相关文章

随机推荐

  • WiFi-ESP8266入门开发(十三)-使用SPI

    注 对于ESP8266开源技术感兴趣的可以加群 我们一起探索交流学习 群号 579932824 群名 ESP8266开源技术交流群 介绍 串行外设接口 SPI 是摩托罗拉公司最初启动的总线接口连接协议 SPI接口使用四根线进行通信 因此也被
  • 【JS实用技巧篇】01-函数防抖

    JavaScript专栏 js实用技巧篇 该专栏博主会持续更新 目的是给大家分享一些非常实用的技巧 同时巩固自己的基础 共同进步 欢迎大家在评论区留言交流技术以及学习方法 心得方面的问题 你的一键三连是对我的最大支持 祝大家国庆快乐 文章目
  • 利用python进行数据分析之数据清洗与准备--小白笔记

    数据清洗和准备 处理缺失数据 import pandas as pd import numpy as np string data pd Series aardvark artichoke np nan avocado string dat
  • OpenStack部署之前需要安装哪些必备组件

    二 安全 下面的表格给出了需要密码的服务列表以及它们在指南中关联关系 密码 密码名称 描述 数据库密码 不能使用变量 数据库的root密码 ADMIN PASS admin 用户密码 CEILOMETER DBPASS Telemetry
  • three.js 创建文字的几种方法

    three js 创建文字的几种方法 1 DOM CSS 传统网页html实现 2 将文字绘制到画布中 并将其用作Texture 纹理 将文字保存为图片格式 再将其当作一张蒙皮材质 贴到某个物体上 3 在你所喜欢的3D软件里创建模型 并导出
  • 简单的数字水印加密技术

    最近我一个朋友问谍战情节里是怎样办到将数据隐藏到一般图片里的 正好有一段时间我也研究过这个问题 既然他问了干脆我就写出来和大家也一起分享一下吧 大都是自己琢磨的 如有更加专业的做法欢迎大家讨论啊 由于时间比较久远 当年研究的代码找了半天也没
  • [leetcode] 面试题 17.20. 连续中值

    有很多种形式可以实现中位数的求解 比如将所有的数放到一个数组中 然后sort一下获取中间的值 但这样在时间复杂度上不太优雅 为了能够更快的求解 可以使用对顶堆来求解 对顶堆通常用来实现动态k大 小 的问题 在这个题里 因为在往里面加数的过程
  • api接口的获取调用方式是什么?

    API接口的获取调用方式 通常分为以下几个步骤 1 注册账号并申请API Key 在API服务提供商的官方网站上注册账号 并申请API Key 包括通行证ID和密钥 以便后面的API调用验证 2 查看API接口文档 根据API服务提供商的官
  • OSI Network Layer 網絡層

    OSI Network Layer 網絡層 OSI 網絡層 網絡層數據報 IP 數據報結構 IP 地址 IP 地址分類 私有 IP 地址 子網 subnet 子網是什麼 子網掩碼 subnet mask 路由器 Router static
  • 手把手实现AI诗歌生成(AI写诗)

    本模型采用的是字符级别的诗歌生成 pytorch 环境 python3 X pytorch GPU或CPU版本都行 另外天有点冷 建议用GPU训练 电脑绝对比暖手宝好用 目录 项目文件结构 数据已经打包 1 数据集处理 2 构建模型与训练模
  • C# winform 调用webService 格式化程序尝试对消息反序列化时引发异常: 读取 XML 数据时,超出最大字符串内容长度配额 (8192)。

    错误信息 格式化程序尝试对消息反序列化时引发异常 尝试对参数 http ws xzsoft com 进行反序列化时出错 getWagonResponse InnerException 消息是 反序列化对象 属于类型 CallWeb Serv
  • Jina AI 受邀出席 WAIC 2023「科技无障碍」论坛,与行业专家共话 AI 普惠未来

    7 月 6 日 2023 世界人工智能大会 WAIC 在上海世博中心及世博展览馆开幕 并在浦东张江 徐汇西岸设分会场 同步在闵行等产业集聚区开展同期活动 本届大会由上海市人民政府和国家发改委 工信部 科技部 国家网信办 中国科学院 中国工程
  • 什么是css预处理器?

    CSS 预处理器定义了一种新的语言 其基本思想是 用一种专门的编程语言 为 CSS 增加了一些编程的特性 将 CSS 作为目标生成文件 然后开发者就只要使用这种语言进行web页面样式设计 通俗的说 CSS 预处理器用一种专门的编程语言 进行
  • qt 插件加载失败

    不小心把Release版本的QT NO DEBUG预定义宏删除了 导致插件加载提示 The plugin E Qt Trunk Software GT90 GT90Solution Win32 Release plugins Diagnos
  • MySQL数据库免安装版

    MySQL数据库免安装 1 安装配置启动 MySQL现在的版本主要分为 5 x 版本 现在互联网企业中的主流版本 包括 头条 美图 百度 腾讯等互联网公司主流的版本 8 x 版本 新增了一些了窗口函数 持久化配置 隐藏索引等其他功能 所以
  • linux将数字转16进制,使用linux命令将十六进制信息转换为二进制

    我的linux系统上有这个二进制文件 udit udit Dabba cat file enc Salted s bO lt 0 F Jw C LK l 使用hexdump命令 我看到它的信息如下 udit udit Dabba hexdu
  • SpringBoot:Druid 管理界面配置

    SpringBoot MyBatis MySQL Druid PageHeler 核心jar类
  • Python深度学习之VAE

    Deep Learning with Python 这篇文章是我学习 Deep Learning with Python 第二版 Fran ois Chollet 著 时写的系列笔记之一 文章的内容是从 Jupyter notebooks
  • springboot子模块 @Autowired无法找到其他模块的接口和类的解决方法

    在main的启动类上添加 SpringBootApplication scanBasePackages com shangsheng 或者 ComponentScan com shangsheng 注意 只能写两个包的连接点 不能写到最低包
  • 基数排序(Radix Sort)-- 特殊排序算法

    1 基数排序 Radix Sort 基数排序是按照低位先排序 然后收集 再按照高位排序 然后再收集 依次类推 直到最高位 有时候有些属性是有优先级顺序的 先按低优先级排序 再按高优先级排序 最后的次序就是高优先级高的在前 高优先级相同的低优