python实现桶排序

news2024/9/23 19:20:27

桶排序(Bucket Sort)是一种排序算法,它将待排序的元素分到有限数量的桶(buckets)中,然后分别对每个桶中的元素进行排序,最后按照顺序将所有的桶中的元素依次取出,即可得到有序序列。桶排序通常适用于待排序数据的范围(或分布)已知,并且较为均匀的情况下。

算法思想:
将待排序的数据划分到有限数量的桶中。
对每个桶中的元素进行排序。这里可以使用其他排序算法,或者递归地使用桶排序。
将所有桶中的元素按照顺序依次取出,即可得到有序序列。

步骤:
确定桶的数量以及每个桶的范围。桶的数量通常选择为待排序元素的个数,每个桶的范围根据待排序元素的取值范围而定。
遍历待排序数组,将每个元素放入对应的桶中。
对每个非空的桶进行排序,可以使用快速排序、插入排序等。
将所有非空桶中的元素按照顺序依次取出,即为排序后的结果。

时间复杂度:
如果待排序数据均匀分布在各个桶中,则桶排序的时间复杂度为 O(n+k),其中 n 表示待排序元素的数量,k 表示桶的数量。
在最坏情况下,如果所有元素都分配到同一个桶中,则桶排序的时间复杂度为 O(n^2),这时需要对每个桶进行排序。

应用场景:
桶排序适用于待排序数据的范围已知,并且较为均匀的情况下。例如,对一组在特定范围内的浮点数进行排序。

优缺点:
优点:简单高效,适用于大量数据的排序。
缺点:需要额外的存储空间,且如果数据分布不均匀,可能会导致某些桶过于庞大,造成额外的时间和空间开销。
桶排序是一种高效的排序算法,在某些特定的场景下具有较好的性能表现。然而,需要根据实际情况选择合适的排序算法以及合理设置桶的数量和范围,以确保算法的有效性。

def bucket_sort(arr):
    # 创建桶列表,每个桶用一个列表表示
    num_buckets = len(arr)
    buckets = [[] for _ in range(num_buckets)]

    # 将待排序数组中的元素分配到对应的桶中
    for num in arr:
        bucket_index = int(num/10)
        buckets[bucket_index].append(num)
    print(buckets)
    # 对每个非空桶中的元素进行排序
    for bucket in buckets:
        bucket.sort()

    # 合并所有桶中的元素
    sorted_arr = []
    for bucket in buckets:
        sorted_arr.extend(bucket)

    return sorted_arr


# 测试示例
arr = [8, 5, 22, 15, 28, 9, 45, 42, 39, 19, 27, 47, 12]
print("排序后的数组:", bucket_sort(arr))


算法思路:

创建一个桶列表,列表的长度通常取决于待排序数组中的元素数量,每个桶用一个列表来表示。
遍历待排序数组,将每个元素根据其值的大小分配到对应的桶中。这里的分配方法是n/10
在这里插入图片描述

对每个非空桶中的元素进行排序。可以使用任何排序算法,这里使用的是 Python 自带的排序函数 sort()。
在这里插入图片描述

合并所有桶中的元素,即为排序后的结果。
桶排序的核心思想是根据待排序元素的大小将它们分配到不同的桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素合并起来得到有序序列。这种方法在元素的范围已知且较为均匀分布时可以有效地提高排序的效率。

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

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

相关文章

深入了解Kafka中Topic的神奇之处

欢迎来到我的博客,代码的世界里,每一行都是一个故事 深入了解Kafka中Topic的神奇之处 前言Topic的基本概念Kafka Topic 的定义:Kafka Topic 的基本原理:为何 Topic 是 Kafka 消息传递的核心组成部分: 创建和配置Topic创…

FairScale 库测试实验(一)-- 大模型训练基础之模型并行

DDP的分布式训练方法采用数据并行方式,相当于通过增大数据的batch来加快训练。但对于大模型(LLM)来说,DDP已经不适用了。因为LLMs的模型本身太大,一块GPU都放不下怎么可能去复制从而实现数据并行呢。所以LLM的训练采用…

Ansible常用模块详解

Ansible常用模块详解一、Ansible简介1、Ansible是什么?2、Ansible是怎么工作的?3、Ansible的特性 二、Ansible 环境安装部署三、Ansible 命令行模块1、command 模块2、shell 模块3、cron 模块4、user 模块5、group 模块6、copy 模块7、file 模块8、hostn…

阿里云服务器没有国外地域吗?

阿里云地域没有国外节点?有,阿里云服务器国外地域美国、日本、新加坡、韩国、英国及德国等,阿里云服务器地域遍布全球,共29个地域可选。如果您在购买阿里云服务器时,没有国外地域可选,那是因为活动上提供的…

基于SSM框架的婚庆平台设计与实现

目 录 摘 要 I Abstract II 引 言 1 1相关技术 3 1.1 SSM框架简介 3 1.2 MySQL数据库简介 3 1.3 MVC设计模式简介 3 1.4 本章小结 4 2系统分析 5 2.1功能需求 5 2.1.1 用户功能需求 5 2.1.2 管理员功能需求 6 2.2非功能需求 10 2.3本章小结 10 3系统设计 11 3.1总体设计 11 3.…

spark 实验二 RDD编程初级实践

目录 一. pyspark交互式编程示例(学生选课成绩统计) 该系总共有多少学生; 该系DataBase课程共有多少人选修; 各门课程的平均分是多少; 使用累加器计算共有多少人选了DataBase这门课。 二.编写独立应用程序实现数…

java Spring boot简述jetcache 并叙述后续文章安排

我们之前 讲了 Spring boot 整合 cache 使用 simple(默认) redis Ehcache memcached的几种方式 但是 始终有人觉得不够完善 提出了一些问题 例如 觉得 当前spring boot 对缓存过期的控制过于松散 不严谨 比较明显的体现就是 memcached过期时间在逻辑代码中控制 Ehcache的过期时…

spring boot 集成 mysql ,mybatisplus多数据源

1、需要的依赖&#xff0c;版本自行控制 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java<…

神经网络 梯度与神经元参数w、b关系;梯度与导数关系

参考&#xff1a;https://blog.csdn.net/weixin_44259490/article/details/90295146 概念 梯度与w的关系可以用梯度下降公式来表示&#xff1a;ww−α ∂ c o s t ∂ w \frac{\partial cost}{\partial w} ∂w∂cost​&#xff0c;其中w表示网络的权重&#xff0c; ∂ c o s t…

练习3-softmax分类(李沐函数简要解析)与d2l.train_ch3缺失的简单解决方式

环境为:练习1的环境 网址为:https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.1007.top_right_bar_window_history.content.click 代码简要解析 导入模块 导入PyTorch 导入Torch中的nn模块 导入d2l中torch模块 并命名为d2l import torch from torch import nn…

实现鼠标移动el-select下拉框的label上面显示出table悬浮窗

首先是对vue代码 实现思路就是在el-option里面放一个span来包裹el-popover&#xff0c;里面在放tabe实现悬浮表格 <el-form-item label"原理图编号"><el-select v-model"data.number" placeholder"请选择" clearable multiple collaps…

C语言第三十七弹---文件操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 文件操作 1、文件的随机读写 1.1、fseek 1.2、ftell 1.3、rewind 2、文件读取结束的判定 2.1、被错误使用的 feof 3、文件缓冲区 总结 1、文件的随机读写…

阿里云主机地域怎么选择?哪个好?

阿里云服务器地域选择方法&#xff0c;如何选择速度更快、网络延迟更低的地域节点&#xff0c;地域指云服务器所在的地理位置区域&#xff0c;地域以城市划分&#xff0c;如北京、杭州、深圳及上海等&#xff0c;如何选择地域&#xff1f;建议根据用户所在地区就近选择地域&…

同等学力申硕专业介绍——管理学硕士

同等学力申硕的专业很多。 目前有十三大门类&#xff0c;分别是医学、法学、管理学、工学、教育学、经济学、艺术学、文学、历史学、理学、哲学、农学、军事学等&#xff0c;每个大门类中都有很多的细分专业。 今天为大家介绍同等学力申硕专业——管理学。 专业介绍 管理学是…

Java后端核心——Servlet

目录 一.概述 二.基础实现 1.导入坐标 2.定义实现类 3.注解 4.访问Servlet 三.执行流程 四.生命周期 1.加载和实例化 2.初始化 3.请求处理 4.服务终止 五.方法 1.init 2.service 3.destroy 4.getServletInfo 5.getServletConfig 六.体系结构 七.urlPatter…

Spring Boot中Excel数据导入导出的高效实现

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

能量不等式证明

波动方程初值问题能量不等式的证明 Gronwall 不等式 若非负函数 G ( τ ) G(\tau) G(τ) 在 [ 0 , T ] [0,T] [0,T] 上连续可微&#xff0c; G ( 0 ) 0 G(0)0 G(0)0&#xff0c;且对 τ ∈ [ 0 , T ] \tau\in[0,T] τ∈[0,T]满足 d G ( τ ) d τ ≤ C G ( τ ) F ( τ …

Using WebView from more than one process

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、问题过程源码追踪…

Mamba-minimal Mamba的最小限度实现 (一)

文章目录 参数和数据尺寸约定class MambaBlockdef forwarddef __ int__def ssmdef selective_scan johnma2006/mamba-minimal: Simple, minimal implementation of the Mamba SSM in one file of PyTorch. (github.com) manba的简单最小限度实现&#xff0c;和原始论文实现stat…

深入了解Kafka中生产者的神奇力量

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 深入了解Kafka中生产者的神奇力量 前言生产者的基本概念Kafka 生产者的定义&#xff1a;Kafka 生产者的基本原理&#xff1a;为何生产者是 Kafka 消息传递的创造者&#xff1a; 生产者的创建于配置生产…