十大排序算法之->基数排序

一、计数排序简介

基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是用0-9之间的所有整数作为键值,对数据集中的每一个数,按照从低位到高位的顺序,依次执行一次分配和收集操作。经过多次这样的操作后,数据集就变成了有序的。

基数排序是稳定排序,即相等的元素在排序后保持原有的相对位置

基数排序的时间复杂度为O(nk),其中n为待排序元素个数,k为元素的位数。当k较小时,基数排序的效率较高。

基数排序的空间复杂度为O(n+k),需要额外的空间来存储桶。

二、Python代码实现

# -*- coding: utf-8 -*-
"""
======================================File Name  : radix_sort.pyAuthor     : lanmingyongdate       : 2024/6/21 15:49Description: 基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是用0-9之间的所有整数作为键值,对数据集中的每一个数,按照从低位到高位的顺序,依次执行一次分配和收集操作。经过多次这样的操作后,数据集就变成了有序的。基数排序是稳定排序,即相等的元素在排序后保持原有的相对位置基数排序的时间复杂度为O(nk),其中n为待排序元素个数,k为元素的位数。当k较小时,基数排序的效率较高。基数排序的空间复杂度为O(n+k),需要额外的空间来存储桶。
======================================= 
"""def radix_sort(arr):# 基数排序new_arr = arrnew_list = [[], [], [], [], [], [], [], [], [], []]for i in range(len(str(max(arr)))):for j in new_arr:if i + 1 > len(str(j)):new_list[0].append(j)else:new_list[int(str(j)[-(i + 1)])].append(j)new_arr = [k for l in new_list for k in l]new_list = [[], [], [], [], [], [], [], [], [], []]print("每一位排序结果:" + str(new_arr))return new_arr# 验证
# arr = [9, 6, 7, 2, 8, 1, 0, 4, 3, 0]
arr = [89, 65, 21, 8, 76, 79, 0, 86, 51, 33, 34, 8, 76, 53, 93, 88, 65, 0, 92, 56, 76, 9, 111, 0, 54, 9, 37, 94, 72, 92,72, 88, 44, 34, 48, 14, 22, 76, 34, 45, 50, 66, 4, 77, 41, 64, 24, 65, 99, 16, 64]if __name__ == '__main__':print(radix_sort(arr))# 执行输出
"""
每一位排序结果:[0, 0, 0, 50, 21, 51, 111, 41, 92, 72, 92, 72, 22, 33, 53, 93, 34, 54, 94, 44, 34, 14, 34, 4, 64, 24, 64, 65, 65, 45, 65, 76, 86, 76, 56, 76, 76, 66, 16, 37, 77, 8, 8, 88, 88, 48, 89, 79, 9, 9, 99]
每一位排序结果:[0, 0, 0, 4, 8, 8, 9, 9, 111, 14, 16, 21, 22, 24, 33, 34, 34, 34, 37, 41, 44, 45, 48, 50, 51, 53, 54, 56, 64, 64, 65, 65, 65, 66, 72, 72, 76, 76, 76, 76, 77, 79, 86, 88, 88, 89, 92, 92, 93, 94, 99]
每一位排序结果:[0, 0, 0, 4, 8, 8, 9, 9, 14, 16, 21, 22, 24, 33, 34, 34, 34, 37, 41, 44, 45, 48, 50, 51, 53, 54, 56, 64, 64, 65, 65, 65, 66, 72, 72, 76, 76, 76, 76, 77, 79, 86, 88, 88, 89, 92, 92, 93, 94, 99, 111]
[0, 0, 0, 4, 8, 8, 9, 9, 14, 16, 21, 22, 24, 33, 34, 34, 34, 37, 41, 44, 45, 48, 50, 51, 53, 54, 56, 64, 64, 65, 65, 65, 66, 72, 72, 76, 76, 76, 76, 77, 79, 86, 88, 88, 89, 92, 92, 93, 94, 99, 111]
"""

:如果代码有错误欢迎指出交流,感谢!!

三、动画演示

欢迎大家关注我的订阅号,会不定期分享一些相关的文章,有问题也欢迎一起讨论交流学习!
在这里插入图片描述

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

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

相关文章

Vue.js开发中基于localStorage与sessionStorage的本地存储利器:Vue-ls插件使用详解

文章目录 一、介绍二、安装三、使用1、在main.js中导入插件并配置2、在组件中使用3、全局使用3、上下文使用 四、API1、获取数据2、设置数据3、移除数据4、清空数据5、监听数据6、移除监听 五、使用示例1、单独的 js 文件2、使用方法 六、typescriptvue3使用vue-ls1、新建 stor…

【SDV让汽车架构“和而不同”】

昔日以“排气管数量”和“发动机动力”为骄傲的荣耀已然成为过往。在这个崭新的时代,特斯拉、理想、蔚来、小鹏、零跑等新兴的汽车制造商纷纷推出了搭载可交互大屏、实现万物互联、软件功能持续更新的新车型,它们被誉为“车轮上的智能手机”。同时&#…

【方案】基于5G智慧工业园区解决方案(PPT原件)

5G智慧工业园区整体解决方案旨在通过集成5G通信技术、物联网、大数据和云计算等先进技术,实现园区的智能化、高效化和绿色化。 该方案首先构建高速、稳定的5G网络,确保园区内设备、人员与物流的实时连接和高效沟通。其次,通过工业物联网技术&…

行业观察丨服装品牌着重点:电商的数据采集与数据分析

互联网爆发的各行业,关注在生产、销售、穿着以及后续的处理过程中存在的问题,希望能对会员企业乃至整个社会贡献出自己的一份力量。让我们共同思考,作为品牌企业或者个体,如何抓住新趋势。 做渠道价格的治理需要品牌对线上数据尽数…

代码随想录算法训练营day47

题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 参考链接:代码随想录 188.买卖股票的最佳时机IV 思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路&…

MATLAB复习

MATLAB常用的标点符号 空格 变量分隔符 矩阵一行中各元素间的分隔符 程序语句关键词分隔符 逗号,分隔显示计算结果的各语句 变量分隔符 矩阵中一行各元素的分隔符点号.数值中的小数点 结构数组的域访问符分号;分隔不想显示计算结果的各语句 矩阵行与行的…

2024上海CDIE 参展预告 | 一站式云原生数字化平台已成趋势

为什么企业需要进行数字化转型?大家都在讨论的数字化转型面临哪些困境?2024.6.25-26 CDIE数字化创新博览会现场,展位【A18】,期待与您相遇,共同探讨企业如何利用数字化技术驱动业务增长。 一、展会介绍——CDIE数字化…

web后端

Web后端开发是Web应用开发的重要组成部分,主要负责处理Web应用的后端逻辑和数据存储。后端开发人员需要根据需求和设计文档,设计和开发Web应用的后端逻辑,包括数据处理、业务逻辑和API接口等。他们还需要设计和管理Web应用的数据库&#xf…

PDF秒变翻页式电子画册

​在当今数字化时代,将PDF文档转换成翻页式电子画册是一种提升作品展示效果和传播效率的有效方式。以下是将PDF秒变翻页式电子画册的攻略,帮助您轻松掌握数字创作技巧。 首先,选择一个合适的制作工具是关键。目前市场上有多种在线平台和软件可…

图像识别技术在人脸识别领域的新突破

图像识别技术在人脸识别领域的新突破主要体现在多个方面,这些突破不仅提高了人脸识别的准确性和效率,还拓展了其应用领域。以下是对这些新突破的详细归纳: 深度学习技术的应用: 深度学习技术,特别是卷积神经网络&…

内网穿透是什么?为什么需要内网穿透?小白也能看懂!

内网穿透是什么?为什么需要内网穿透?小白也能看懂! 通俗易懂的说法 内网穿透,就像是你家里的后院有一个宝藏,但是这个宝藏只有住在你家的人才能看得到。现在,你想让住在远处的朋友也能欣赏到这个宝藏&…

输入系统和应用编程

目录 一、输入设备和输入系统 1.什么是输入设备? 2.什么是输入系统? 二、输入系统框架及调试 1.框架概述 2.编写 APP 需要掌握的知识 (1)内核中怎么表示一个输入设备? (2)APP 可以得到什…

IK分词器热刷新词库实践分享

目录 前言 什么是分词器? ik分词器简介 ik分词器和默认分词器的对比 ik分词器介绍 ik分词器的分词问题 自定义词库 主配置解说 通过配置文件自定义词库 Step1: 新建自定义分词库 Step2: 将我们的自定义词添加到ik的配置文件中 Step3: 重启es,…

黑盒测试中的完整性测试:确保系统的功能完整性

在软件开发过程中,为了保证系统的质量和可靠性,测试是一个不可或缺的环节。而黑盒测试作为常用的测试方法之一,以用户的角度出发,测试系统在不知道内部工作原理的情况下,对输入数据的处理和输出结果的正确性进行验证。…

react+ts 使用webp格式的图片处理

需求: 公司官网大图内存较大加载很慢,于是用webp格式的图片来替换原来的图片,在React项目中,如果你使用的是Create React App(CRA)或Webpack进行项目构建,遇到的常见错误原因可能涉及以下几点&a…

Node.js车牌识别、文档识别、OCR API-自动化录入信息

为什么人工智能如此受关注?因为人工智能技术在图片处理以及在感知与认知等领域的不断突破,带来更高的效率。没错,智能机器人、人工智能技术衍生的产品已经开始替代人的工作。文字录入工作较为显著,OCR技术成为手动录入的杀手锏&am…

MySQL字典数据库设计与实现 ---项目实战

软件准备✍:Mysql与Navicat可视化命令大全 ----项目实战 文章前言部分 目录 一.摘要 二.设计内容 三.项目实现 一.摘要 本项目关注于字典数据库表结构的设计和数据管理。通过现有的sql文件,实现system_dict_type和system_dict_data两个数据表。随后…

去中心化衍生品协议内卷,ZKX 能否通过差异化道路突出重围?

去中心化衍生品赛道目前从协议类型来看,主要有两种解决方案: 以 GMX 为代表的 Vault 模式,LP 作为交易者的对手盘,由 Orcale 喂价决定交易价格。 以 dYdX 为代表的订单薄模式,链下撮合链上结算。 这两种解决方案虽然…

前端 三维空间笔记

<!DOCTYPE html> <html> <head> <!-- 考点2D旋转&#xff0c;位移&#xff0c;缩放&#xff0c;倾斜和3D --> <meta charset"utf-8" /> <title>三维</title> <style type"te…

短视频剪辑都学习哪些人软件?沈阳有哪些办公软件培训学校

在学习短视频剪辑时&#xff0c;通常会接触到以下几个常用的软件&#xff0c;每个软件都有其独特的功能和优势&#xff1a; Adobe Premiere Pro&#xff1a; 功能强大&#xff0c;适用于专业级别的剪辑。支持多种格式&#xff0c;拥有丰富的插件和特效。集成了Adobe其他产品&am…