基数排序python

news2024/11/25 20:29:08

           一、基数排序介绍

基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序。

多关键字排序:

       加入现在一个员工表,要求按照工资排序,年龄相同的员工按照年龄排序。

解决方法:

       先按照年龄进行排序,再按照工资进行排序

    二、基数排序的实例过程

举例:如对32,13,94,52,17,54,93排序,是否可以看作多关键字排序?

       可以,十位看作是第一关键字,个位看作是第二关键字。

排序过程:

第一步:按照个位分桶

按照个位数分好桶如下图:

 

第二步:从前往后依次输出:

第三步:按照十位数分桶

 第四步:出桶

 三、基数排序的Python代码实现

def radix_sort(li):
    """基数排序,装桶输出不做排序"""
    max_num=max(li)#最大值99->2,888->3,10000->5
    it=0
    #循环条件:如果10的it次方小于等于max_num
    while 10 ** it <=max_num:
        buckets=[[] for _ in range(10)] #生成10个桶
        for var in li:
            """
            取数字个位数的值:987%10 取余
            取数字十位数的值:(987//10)%10 取整再取余
            取数字百位数的值:(987//100)%10 对100取整再取余
            """
            digit=(var//10**it)%10
            buckets[digit].append(var)#分桶

        #分桶完成,将数据依次取出
        li.clear()
        for buc in buckets:
            li.extend(buc)  #将数据重新写回li

        it +=1


import random
li=list(range(100))
random.shuffle(li)
print(li)
radix_sort(li)
print(li)

运行结果:

[47, 51, 78, 93, 71, 70, 97, 73, 22, 30, 6, 87, 46, 86, 41, 54, 96, 57, 76, 60, 1, 20, 33, 81, 7, 0, 2, 42, 4, 32, 75, 69, 48, 13, 26, 63, 37, 25, 66, 80, 31, 67, 16, 82, 85, 88, 94, 50, 8, 98, 72, 89, 11, 56, 74, 65, 12, 52, 9, 36, 91, 23, 45, 84, 5, 34, 55, 95, 68, 24, 79, 44, 99, 3, 83, 35, 10, 59, 53, 62, 14, 49, 21, 15, 58, 38, 39, 92, 40, 77, 27, 43, 29, 18, 90, 64, 17, 61, 28, 19]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

Process finished with exit code 0

四、基数排序的算法性能

时间复杂度:O(kn),这里的k = log10n,而快速排序是O(nlog2n)。由此可见基数排序比快排要快。但是当数字范围越来越大,k越来越大时,效率会慢于快排。

  空间复杂度:O(k+n),基数排序空间上会消耗一个桶,空间消耗也是比较大的。因此最常用的还是快速排序和python自带的排序。

'''分析函数的写法'''
def list_to_buckets(li,base,iteration):
      """
        列表到桶
        :param li:
        :param base: 分的桶的个数
        :param iteration: 装桶是第几次迭代
        :return:
      """
      buckets = [[] for _ in range(base)]
      for number in li:
          digit = (number//(base ** iteration))%base
          buckets[digit].append(number)
      return buckets


def buckets_to_list(buckets):
    return [x for bucket in buckets for x in bucket]
    '''取到二维数组中的某个值'''
    # li = []
    # for bucket in buckets:
    #     for num in bucket:
    #         li.append(num)


def radix_sort(li,base=10):
    maxval=max(li)
    it=0
    while base **it <=maxval:
        li=buckets_to_list(list_to_buckets(li,base,it))
        it+=1
    return it


import random
li=[random.randint(0,100) for _ in range(10)]
random.shuffle(li)
s=radix_sort(li)
print(s)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/86459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows逆向】Windows进程动态patch入门+pyqt5搭建GUI

目标 希望学习对Windows进程的动态patch&#xff0c;我们选择的exe是buuoj的“不一样的flag”。这题是迷宫题的hello world&#xff0c;没有加壳&#xff0c;没有任何代码混淆&#xff0c;且可以把它当成一个超小型的游戏&#xff0c;有助于提升信心。 为了直观&#xff0c;以…

【学习笔记】SAP固定资产的减值功能

SAP固定资产的减值功能 若固定资产出现减值迹象&#xff0c;也就是固定资产的可收回金额小于账面价值时&#xff0c;就要计提固定资产减值准备。 分录&#xff1a; 借&#xff1a;资产减值损失&#xff08;损益科目&#xff09; 贷&#xff1a;固定资产减值准备&#xff08;资…

软件测试 | APP测试 —— Appium 的环境搭建及工具安装教程

推荐阅读&#xff1a; [内部资源] 想拿年薪30W的软件测试人员&#xff0c;这份资料必须领取~ Python自动化测试全栈性能测试全栈&#xff0c;挑战年薪40W 从功能测试进阶自动化测试&#xff0c;熬夜7天整理出这一份超全学习指南【附网盘资源】 大家应该都有同一种感觉&…

传奇怎么设置GM帐号GM命令

传奇怎么设置GM帐号GM命令 我们先创建账号进入游戏 进入到服务器里面打开我的电脑 计算机D:\Mirserver\Mir200\Envir打开AdminList.txt文件 退出保存文本&#xff0c;小退一下游戏再次进入就是GM号了 方法二&#xff1a;在任务栏找到M2Server 点击查看-----列表信息一 保存后我…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.6 TCC 模式原理

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.6 TCC 模式原理38.6.1 TCC 模式原理38.6.2 举个栗子38.6.3 工作流程38.6.4 总结38 …

TensoRT—— buffers管理(samplesCommon::BufferManager)

BufferManager类处理主机和设备buffer分配和释放。 这个RAII类处理主机和设备buffer的分配和释放、主机和设备buffers之间的memcpy以帮助inference&#xff0c;以及debugging dumps以验证inference。BufferManager类用于简化buffer管理以及buffer和 engine之间的交互。 代码位…

web前端网页制作课作业:校园科技节活动网站 (纯HTML+CSS布局制作)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

cleanmymac x免费版安装包下载使用教程

我这台用了7年的MacBook Air &#xff0c;硬盘容量只有 128G &#xff0c;用段时间就会被系统提醒「您的磁盘几乎已满」&#xff0c;并且变得有点卡顿。这时&#xff0c;清理一下垃圾&#xff0c;腾出更多储存空间&#xff0c;就能让它满血复活。 这个时候我们可以用 CleanMyM…

Kafka系列之:使用kafka manager增加topic分区和副本

Kafka系列之:使用kafka manager增加topic分区和副本) 一、相关技术博客二、增加分区三、增加副本一、相关技术博客 Kafka系列之:实现kafka topic优先副本的选举Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡二、增加分区 增加分区: 增加完分区…

Adobe Acrobat 图标异常的解决办法

今天使用 Adobe Acrobat 打开文件阅读时&#xff0c;发现底部任务栏的图标是这样的&#xff0c;如下图所示。 这可不是常见的 Adobe Acrobat 图标&#xff0c;肯定是哪里出了问题&#xff0c;于是我在电脑开始这里找到 Adobe Acrobat 的快捷方式&#xff0c;其图标也是这样的&…

Android Binder 通信一次拷贝的原理

前言 对于 Android 开发者来说 Binder 应该不会陌生了&#xff0c;Binder 是 Android 提供的 IPC 通信机制&#xff0c;它是通过内存映射实现的&#xff0c;而这也是 Binder 相对于其他传统进程间通信方式的优点之一&#xff0c;即我们说的 Binder 只需要做“一次拷贝”&#…

基于springboot高校闲置物品交易系统微信小程序源码和论文

基于springboot二手物品交易系统微信小程序 互联网的兴起从本质上改变了整个社会的商品交易方式&#xff0c;国内各大企业从上个世纪 90 年代互联网兴起之时&#xff0c;就产生了通过网络进行销售经营商品的想法。但是由于在互网上企业的信誉难以认证、网络的法规政策不健全、物…

论文阅读|Embedding-based Retrieval in Facebook Search

该论文是facebook发表在KDD2020上的一篇关于搜索召回的paper。这篇文章提到的大多trick对于做过召回的同学比较熟悉了&#xff0c;可贵之处在于全面&#xff0c;包括了特征、样本、模型、全链路等各种细节知识。 1. 整体思路与框架 本文的出发点是搜索只做到query关键词匹配的…

电压放大器在农田灌溉管道缺陷检测研究中的应用

实验名称&#xff1a;电压放大器在农田灌溉管道缺陷检测研究中的应用 研究方向&#xff1a;管道检测、超声波检测 图&#xff1a;管道示意图 测试目的&#xff1a; 超声导波检测构件时&#xff0c;先激励导波使其在构件中传播&#xff0c;导波遇到构件中不连续处或有缺陷的地方…

Linux部署Tomcat和Nginx

目录一、Linux相关软件安装1. 安装gcc编译器2. 安装文件上传3. 安装wget4. 安装vim二、安装jdk和Apache-Tomcat1. 上传jdk和Apache-Tomcat2. 配置环境变量3. 测试&#xff08;1&#xff09;测试jdk&#xff08;2&#xff09;测试Apache-Tomcat三、安装Nginx1. 下载Nginx包2. 配…

哪路神仙写的421页MySQL高级笔记,涵盖MySQL所有技术!太香了

第2章MySQL权限与安全 对于企业而言&#xff0c;数据库中保存的企业业务数据是非常重要的信息&#xff0c;尤其是互联网企业&#xff0c;数据库中的用户信息是企业的根本资源。MySQL数据库管理系统的安全性涉及方方面面&#xff0c;不仅和操作系统本身有很大的关系&#xff0c;…

KD 树原理详解

一 点睛 KD 树&#xff08;K-Dimension tree&#xff09;是可以存储 K 维数据的树&#xff0c;是二叉搜索树的拓展&#xff0c;主要用于多维空间数据的搜索&#xff0c;例如范围搜索和最近邻搜索。BST、AVL、Treap 和伸展树等二叉搜索树的节点存储的都是一维信息&#xff0c;一…

上美股份在港交所开启招股:业绩将继续下滑,吕义雄提前大额套现

12月12日&#xff0c;上海上美化妆品股份有限公司&#xff08;HK:02145&#xff0c;下称“上美股份”&#xff09;在港交所开启招股。根据公告&#xff0c;上美股份本次拟全球发售3695.8万股&#xff0c;发售价将为每股发售股份25.20-29.80港元&#xff0c;预期将于2022年12月2…

基于二阶锥规划的主动配电网最优潮流求解(Matlab代码实现)

&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&#xff1a;行百里者&#xff0c;半于九十。 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff…

豪横卡塔尔!疯狂世界杯

豪横卡塔尔&#xff01;疯狂世界杯1.Big Data -- Postgres1.1 Big Data -- Postgres2.Big Data -- Postgres3.Big Data -- Postgres1.Big Data – Postgres 这届世界杯是有史以来最贵的一次世界杯&#xff0c;因为这次世界杯卡塔尔就花了2200多亿美元&#xff0c;可以说自世界杯…