python实现计数排序、桶排序和基数排序算法

python实现计数排序、桶排序和基数排序算法

      • 计数排序
        • 算法步骤:
      • Python实现计数排序
      • 桶排序
        • 算法步骤:
      • Python实现桶排序
      • 基数排序
        • 算法步骤:
      • Python实现基数排序
      • 算法时间复杂度

计数排序

计数排序是一种非比较排序算法,适用于元素范围较小的整数排序。它通过统计每个元素出现的次数,然后根据计数对元素进行排序。

算法步骤:
  1. 找出待排序数组中的最大值和最小值。
  2. 创建一个计数数组,计数数组的长度为最大值和最小值的差值加一。
  3. 统计每个元素在待排序数组中出现的次数,并存储在计数数组的对应位置。
  4. 对计数数组进行累加处理。
  5. 根据计数数组,将元素放回到原数组的正确位置。

Python实现计数排序

def counting_sort(lst):if not lst:return []min_val = min(lst)max_val = max(lst)range_of_elements = max_val - min_val + 1count_arr = [0] * range_of_elementsoutput_arr = [0] * len(lst)for num in lst:count_arr[num - min_val] += 1for i in range(1, len(count_arr)):count_arr[i] += count_arr[i - 1]for num in reversed(lst):output_arr[count_arr[num - min_val] - 1] = numcount_arr[num - min_val] -= 1return output_arr# 示例
lst = [4, 2, 2, 8, 3, 3, 1]
sorted_lst = counting_sort(lst)
print("排序后的列表:", sorted_lst)

桶排序

桶排序适用于均匀分布的浮点数。它将数据分到有限数量的桶里,对每个桶分别排序,最后合并所有桶中的数据得到有序序列。

算法步骤:
  1. 设置一个定量的数组当作空桶。
  2. 把数组元素分散到各个桶中。
  3. 对每个不为空的桶进行排序。
  4. 依次从不为空的桶中取出元素。

Python实现桶排序

def bucket_sort(lst):if len(lst) == 0:return []bucket_count = 10max_value = max(lst)buckets = [[] for _ in range(bucket_count)]for num in lst:index = int(num * bucket_count / (max_value + 1))buckets[index].append(num)for bucket in buckets:bucket.sort()sorted_lst = []for bucket in buckets:sorted_lst.extend(bucket)return sorted_lst# 示例
lst = [0.78, 0.17, 0.39, 0.26, 0.72, 0.94, 0.21, 0.12, 0.23, 0.68]
sorted_lst = bucket_sort(lst)
print("排序后的列表:", sorted_lst)

基数排序

基数排序是通过按位排序的方法,首先对最低位进行排序,然后对次低位进行排序,依次进行,直到最高位。基数排序适用于整数或字符串排序。

算法步骤:
  1. 找出数组中的最大值,确定排序的位数。
  2. 从最低位开始,对每个位进行计数排序。

Python实现基数排序

def counting_sort_for_radix(lst, exp):n = len(lst)output = [0] * ncount = [0] * 10for num in lst:index = num // expcount[index % 10] += 1for i in range(1, 10):count[i] += count[i - 1]for num in reversed(lst):index = num // expoutput[count[index % 10] - 1] = numcount[index % 10] -= 1for i in range(n):lst[i] = output[i]def radix_sort(lst):max_val = max(lst)exp = 1while max_val // exp > 0:counting_sort_for_radix(lst, exp)exp *= 10return lst# 示例
lst = [170, 45, 75, 90, 802, 24, 2, 66]
sorted_lst = radix_sort(lst)
print("排序后的列表:", sorted_lst)

算法时间复杂度

  • 计数排序的时间复杂度为O(n+k),其中n是数组长度,k是数组中元素的范围。适用于范围较小的整数排序。
  • 桶排序的时间复杂度为O(n+k),其中n是数组长度,k是桶的数量。适用于均匀分布的浮点数排序。
  • 基数排序的时间复杂度为O(d(n+k)),其中n是数组长度,k是桶的数量,d是位数。适用于整数或字符串排序。

通过以上实现,可以看到这三种排序算法在不同场景下的适用性。计数排序适用于范围较小的整数排序;桶排序适用于均匀分布的浮点数排序;基数排序适用于多位数的整数排序。

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

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

相关文章

数据仓库中事实表设计的关键步骤解析

在数据仓库的设计过程中,事实表是描述业务度量的核心组件。本文将深入探讨数据仓库中事实表设计的关键步骤,包括选择业务过程及确定事实表类型、声明粒度、确定维度和确定事实的过程,帮助读者更好地理解和应用事实表设计的原则和方法。 第一…

Ideal窗口中左右侧栏消失了

不知道大家在工作过程中有没有遇到过此类问题,不论是Maven项目还是Gradle项目,突然发现Ideal窗口右侧图标丢失了,同事今天突然说大象图标不见了,不知道怎样刷新gradle。 不要慌张,下面提供一些解决思路: 1…

【C语言ffmpeg】打开第一个视频

文章目录 前言须知ffmpeg打开文件基本流程图ffmpeg打开媒体文件AVFormatContext *avformat_alloc_context(void);AVFormatContext 成员变量及其作用AVInputFormat *iformatAVOutputFormat *oformatvoid *priv_dataAVIOContext *pbunsigned int nb_streamsAVStream **streamscha…

LeetCode 232.用栈实现队列 C写法

LeetCode 232.用栈实现队列 C写法 思路🧐: 栈代码在本篇中。与队列实现栈类似,不过这里我们建立两个栈,一个栈专门存放入队数据,一个专门存放出队数据,不需要再来回导数据。原理在于一个栈的数据到另一个栈…

Windows右键新建Markdown文件类型配置 | Typora | VSCode

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张分享的是如何在右键的新建菜单中添加新建MarkdownFile文件,这是毛毛张分享的关于Typora软件的相关知识的第三期 文章目录 1.前言🏝…

「MQTT over QUIC」与「MQTT over TCP」与 「TCP 」通信测试报告

一、结论 在实车5G测试中「MQTT Over QUIC」整体表现优于「TCP」,可在系统架构升级时采用MQTT Over QUIC替换原有的TCP通讯;从实现原理上基于QUIC比基于TCP在弱网、网络抖动导致频繁重连场景延迟更低。 二、测试方案 网络类型:实车5G、实车…

Easysearch、Elasticsearch、Amazon OpenSearch 快照兼容对比

启动集群 Easysearch sysctl -w vm.max_map_count262144Amazon OpenSearch Elasticsearch 由于这个docker compose没有关于kibana的配置,所以我们还是用Console添加原生的Elasticsearch集群 集群信息 快照还原的步骤 快照前的准备 插件安装 本次测试选择把索…

【微服务】feign使用

【微服务】feign使用 引入依赖启动类配置注解创建业务层使用项目调用可能会遇到的bug 01 引入依赖 Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。在需要…

解决echarts在uniapp里tooltip,legend不能点击的问题

在main.js文件里面添加,这样tooltip就可以点击,但是legend可能还不能点击, window.wx {} // 在使用获取echarts dom使用 echarts.env.touchEventsSupported false; echarts.env.wxa false; const chartContainer this.$refs.chartContai…

生产力工具|Endnote 21 Macwin版本安装

一、软件下载: (一)mac版本 Endnote 21版本下载:点击下载 Endnote 20版本下载:点击下载 Endnote X9版本下载:点击下载 (二)Endnote 20 Win版本 第一步:安装好官网软…

Eureka: 微服务架构中的服务发现与注册实践

Eureka介绍与使用教程 你好,我是悦创。 Eureka 是 Netflix 开发的一款服务发现(Service Discovery)工具,它主要用于云中基于微服务架构的应用程序。Eureka使服务实例能够动态地注册自己,而其他服务实例可以通过 Eure…

【技术前沿 | AI Native应用新纪元:深度解析模型微调的艺术】

在这个智能化浪潮席卷全球的今天,AI技术已经不再是遥不可及的未来概念,而是深深地融入了我们的日常生活与工作中。从智能家居到自动驾驶,从智能客服到医疗诊断,AI正以它独有的方式改变着世界。而在这一过程中,AI Nativ…

随手记:推荐vscode好用的几个小插件

原始用了挺久的插件,先上截图,以后有空再编辑: fittenCode 是一个AI小助手,相对来说很智能,你在vscode当中编写代码,甚至都可以知道你下一步知道干嘛,训练的还可以。而且还可以帮你起名字&…

2024年7月17日(nodejs,npm设置国内镜像,vue脚手架,远程管理ssh,踢出用户,scp命令,ssh免密登录)

1、安装nodejs服务 nodejs是一个运行1环境,和javajdk运行环境格式一样 [roota ~]# yum -y install nodejs.x86_64 安装完成之后,使用node -v 查看版本 [roota ~]# node -v v16.20.2 2、简易服务器的环境安装npm 安装包管理器 npm node packae manger [ro…

云计算实训09——rsync远程同步、自动化推取文件、对rsyncd服务进行加密操作、远程监控脚本

一、rsync远程同步 1.rsync基本概述 (1)sync同步 (2)async异步 (3)rsync远程同步 2.rsync的特点 可以镜像保存整个目录树和文件系统 可以保留原有权限,owner,group,时间,软硬链…

数据分析入门:用Python和Numpy探索音乐流行趋势

一、引言 音乐是文化的重要组成部分,而音乐流行趋势则反映了社会文化的变迁和人们审美的变化。通过分析音乐榜单,我们可以了解哪些歌曲或歌手正在受到大众的欢迎,甚至预测未来的流行趋势。Python作为一种强大的编程语言,结合其丰…

[数据集][目标检测]导盲犬拐杖检测数据集VOC+YOLO格式4635张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4635 标注数量(xml文件个数):4635 标注数量(txt文件个数):4635 标注…

【ubuntu】没有声音??连不上网络???

一. ubuntu 突然之后没有声音??? 卸载并重新加载 ALSA 驱动: 使用 alsa force-reload 命令来卸载并重新加载 ALSA 驱动: sudo alsa reload还不行?那就强制 reload sudo alsa force-reload二. ubuntu 突…

深入剖析CommonJS modules和ECMAScript modules

目录 前言CommonJS:服务器端模块化的先驱背景与起源语法与机制 ECMAScript Modules:现代前端的基石背景与起源语法与机制 比较与权衡语法差异加载机制编译时与运行时运行时行为构建第三方库现代开发环境 结论 前言 在 JavaScript 生态系统中&#xff0c…

RabbitMQ学习实践一:MQ的安装

文章是本人在学习springboot实现消息队列功能时所经历的过程的记录,仅供参考,如有侵权请随时指出。 参考文章地址: RabbitMQ安装与入门_rabbitmq win11配置-CSDN博客 RabbitMQ入门到实战一篇文章就够了-CSDN博客 RabbitMQ系列&#xff08…