算法 - 桶排序(Bucket Sort)

2023-05-16

  • 执行流程:
  1. 创建一定数量的桶(比如用数组、链表作为桶)
  2. 按照一定的规制(不同类型的数据,规则不同),将序列中的元素均匀分配到对应的桶
  3. 分别对每个桶进行单独排序
  4. 将所有非空桶的元素合并成有序序列
  • 元素在同种的索引
  • 元素值*元素数量
    在这里插入图片描述

实现

double[] array = {0.34, 0.47, 0.29, 0.84, 0.45, 0.38, 0.35, 0.76}
// 桶数组
List<Double>[] buckets = new List[array.length];
for (int i = 0; i < array.length; i++) {
    int bucketIndex = (int) (array[i] * array.length);
    List<Double> bucket = buckets[bucketIndex];
    if (bucket == null) {
        bucket = new LinkedList<>();
        buckets[bucketIndex] = bucket;
    }
    bucket.add(array[i]);
}
// 对每个桶进行排序
int index = 0;
for (int i = 0; i < buckets.length; i++) {
    if (buckets[i] == null) continue;
    buckets[i].sort(null);
    for (Double d : buckets[i]) {
        array[index++] = d;
    }
}
  • 空间复杂度:O(n+m),m是桶的数量
  • 时间复杂度:O(n) + mO(n/mlog(n/m)) = O(n+nlog(n/m)) = O(n+nlogn-nlogm)
  • 因此为O(n+k),k为nlogn-nlogm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法 - 桶排序(Bucket Sort) 的相关文章

  • Java数组:使用sort()方法对数组进行排序

    想要对数组进行排序可以调用工具类Arrays中的sort 方法 xff08 升序 xff09 例 声明创建一个int类型的a数组 xff0c 对其中的元素排序 span class token keyword public span spa
  • 对string类型sort

    algorithm算法库里的sort函数超级好用 xff0c 那么怎么将string类型当成字符数组一样进行排序呢 只要将需要排序的string的首尾地址放入就行啦 也可以用自己写的cmp函数当成排序规则 传参就可以 include lt
  • Ceph 配置URL访问s3 Bucket

    一 创建json文件 xff0c 用于编辑policy xff0c 文件内容如下 xff08 Version并不重要 xff09 xff0c Action存在多种选择 如步骤三所示 xff0c 并且允许同时选择多个 xff0c 本文只是通过
  • 【leetcode】1122. 数组的相对排序(relative-sort-array)(模拟)[简单]

    链接 https leetcode cn com problems relative sort array 耗时 解题 xff1a 12 min 题解 xff1a 12 min 题意 给你两个数组 xff0c arr1 和 arr2 xff
  • linux lib/list_sort.c排序算法

    linux lib list sort c排序算法 没看懂 xff0c 留念一下 patch地址是https www mail archive com linux kernel 64 vger kernel org msg1957556 h
  • java中数组排序Arrays.sort(arr)

    import java util 选择排序 class SwitchTest public static void main String args int arr 61 3 5 6 23 45 2 排序前 printArray arr 排
  • Arrays.sort()的用法

    一 介绍 1 sort T a 的使用2 sort T a int formIndex int toIndex 的使用3 sort T a Comparator lt supre T gt c 的使用补充 xff1a sort T a Co
  • javascript中的sort()方法

    现在在学习javascript中 xff0c 发现sort 函数是有点奇怪的东西 xff08 可能是本人水平的问题 xff01 xff09 xff0c 于是就在这里记录一下自己找到的东西吧 sort 这个方法的参数很奇怪 xff0c 必须是
  • shell文本去重

    shell文本去重 1 单个文件去重 2 两个文件的交集 并集 求两个文件的并集 求两个文件的交集 求两个文件的差集 3 两个文件合并 上下合并 左右合并 4 多个文件合并去重 1 单个文件去重 参考 https blog csdn net
  • python中的sort的用法

    一 sort的两种用法 1 a sort 对原列表进行原址排序 原址排序的意思是原列表被改变了 排序的规则 数字 字符串按照ASCII 中文按照unicode从小到大排序 a 2 3 6 7 1 a sort print a 1 2 3 6
  • python中sort()和sorted()排序函数用法详解

    python中对数据的排序主要使用sort 和sorted 方法 1 sort 方法 语法结构 列表序列 sort key None reverse False 注意 reverse 表示排序规则 reverse True 降序 rever
  • 简单分析 C 语言的 qsort() 源码

    简单分析 C 语言的 qsort 源码 stdlib h 是使用 C 语言需要引入的库 在系统文件下可以搜索到这个文件夹 在里面可以看到有一个 qsort 文件用编译器或者记事本打开就能看到里面的源码了 单从文件名看 qsort 采用的是快
  • 【Shell牛客刷题系列】SHELL10 第二列是否有重复:复习sort命令和uniq命令~

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 本文主要涉及的命令是sort命令和uniq命令 这
  • R语言排序函数sort(),rank(),order()

    转载地址 http blog sina com cn s blog 6caea8bf0100spe9 html 在R中 和排序相关的函数主要有三个 sort rank order sort x 是对向量x进行排序 返回值排序后的数值向量 r
  • java中Hashcode桶分布

    假设我需要在 Hashset 中存储 1000 个对象 那么我有 1000 个包含每个对象的存储桶 通过为每个对象生成唯一的哈希码值 还是有 10 个大致包含 100 个对象的存储桶更好 拥有唯一存储桶的第一个优点是我可以节省调用 equa
  • Cassandra 存储桶拆分以调整分区大小

    我对 Cassandra 很陌生 我刚刚通过 Datastax 课程学习了它 但我在此处或互联网上没有找到足够的有关存储桶的信息 并且在我的应用程序中我需要使用存储桶来拆分数据 我有一些工具可以进行很多测量 并且每天拆分测量 时间戳作为分区
  • AWS 存储桶策略错误:策略具有无效操作

    我有一个非常基本的目标 将我的存储桶中的所有内容共享给特定用户列表 只读 这曾经与名为 s3cmd 的工具一起使用 我需要做的就是将用户 通过电子邮件标识 添加到Access Control List with Read Permissio
  • Spark 中的分区和分桶有什么区别?

    我尝试优化两个 Spark 数据帧之间的联接查询 我们称它们为 df1 df2 在公共列 SaleId 上联接 df1非常小 5M 所以我在spark集群的节点之间广播它 df2 非常大 200M 行 所以我尝试通过 SaleId 对其进行
  • 文件夹未显示在存储桶存储中

    所以我的问题是安装时有一些文件没有显示在 gcsfuse 中 如果我使用 gsutils ls 我会在在线控制台中看到它们 另外 如果我在存储桶中手动创建文件夹 我就可以看到其中的文件 但我需要先创建它 有什么建议么 gs mybucket
  • 如何使用 Ruby 将文件内容从 S3 存储桶下载到内存中

    我在 Amazon AWS S3 中有一个存储桶 其中有一个名为users csv 如何使用 Ruby 将该文件的内容从 S3 存储桶加载到内存中以便我可以解析它 这是我的代码 require aws sdk s3 Aws S3 Resou

随机推荐

  • 前端页面小图标不显示问题

    这个问题困扰了我好久 xff0c 主要报错是Origin 39 http localhost 39 is therefore not allowed access 等 起因是我引入bootstrap框架后后端页面的一些小图标不显示 xff0
  • Thinkphp审核功能的实现

    审核功能经过几个小时的奋战终于完成了 xff0c 现在我就与广大网友分享我的成果 我定义未审核为 1 xff0c 审核通过为1 xff0c 审核不通过为0 下面请看HTML代码 lt div class 61 34 table respon
  • Thinkphp修改密码的实现

    密码修改是开发中很基础的一个功能 密码修改的HTML代码如下 span span lt form method 61 post class 61 form horizo ntal action 61 gt span span span st
  • 二维数组的输入和输出

    二维数组我知道的有两种方法 第一种方法是平时常见的方法 xff0c 用两个循环 xff0c 例如 for i 61 0 i lt 61 n 1 i 43 43 for j 61 0 j lt 61 n 1 j 43 43 cin gt gt
  • 怎样把网站前端页面扒取

    在网上经常看到一些很好看的页面 xff0c 这些页面其实都可以把代码扒取下来的 xff0c 可以用浏览器的另存为 xff0c 也有一些相应的软件 浏览器扒取 以火狐为例 右键鼠标点击网页另存为 然后保存即可 软件扒取 这种扒取的软件有很多种
  • 算法题1

    假设有这样一个国家 xff0c 其法律规定当公民月收入为x时 xff0c 若x gt 1 则每月应当缴纳的税金为x的因数中除了x之外的最大值 同时该国法律允许公民将月收入分成若干部分 每部分均为整数 xff0c 要求每部分收入都大于1 xf
  • 3.4日期处理

    include lt iostream gt include lt cstdio gt 平年和闰年的每月的天数 int month 13 2 61 0 0 31 31 28 29 31 31 30 30 31 31 30 30 31 31
  • 关于STL和Boost的理解

    xff11 xff0e STL STL是standard Template Library即标准模板库的英文缩写 xff0c 是惠普实验室开发的一系列软件的统称 从根本上讲 STL是一些 容器 的集合 xff0c 这些容器有list vec
  • Ubuntu 各版本号和名称对照

    版本开发代号中译发布日期支持结束时间内核版本桌面版服务器版4 10Warty Warthog多疣的疣猪2004 10 202006 04 302 6 85 04Hoary Hedgehog白发的刺猬2005 04 082006 10 312
  • 【无标题】安装ROS E: 无法定位软件包 ros-melodic-desktop-full

    一 遇到问题 二 可能的原因和解决方法 1 源换一下 xff1a xff08 1 xff09 我是看这位大佬的 5条消息 记录 解决Ubuntu安装ros报错E Unable to locate package ros kinetic de
  • 无线通信原理及协议栈(ZigBee、蓝牙等)解析

    1 天线 说起无线电通信 xff0c 不可不提起天线 在无线电设备中 xff0c 用来辐射和接收无线电波的装置称为天线 在发射端 xff0c 发射机产生的已调制的高频振荡电流 xff08 能量 xff09 经馈电 xff08 指被控制装置向
  • 串口Serial连接方式

    串口Serial连接方式 1 协议终端选择Serial 2 会话选项 xff0c 选择 串行 3 进入电脑 设备管理器 xff0c 查看USB Serial Port以及端口设置 串行选项根据端口设置配置 确定并连接即可
  • tcp/ip 协议栈实现2-socket文件系统

    core initcall sock init net socket c static int init sock init void int err Initialize sock SLAB cache sk init Initializ
  • VMware虚拟机安装Windows11(无需设置TPM密码)

    VMware虚拟机安装Windows11 xff08 无需设置TPM密码 xff09 注意 xff1a 需要新版VMware xff0c 目前小白的版本为 16 2 3 一 新建虚拟机向导 1 新建虚拟机 点击菜单栏文件 新建虚拟机 2 配
  • ROS相关:使用rospy 编写ros程序并使用rosbag存储数据

    为什么使用rospy ROS支持C 43 43 和Python xff0c 由于ROS的底层是由C 43 43 编写 xff0c 因此大多数的ROS程序都使用C 43 43 xff0c 但是Python语言接口简单 xff0c 更容易编写
  • C函数调用过程

    这几天在看GCC Inline Assembly xff0c 在C代码中通过asm或 asm 嵌入一些汇编代码 xff0c 如进行系统调用 xff0c 使用寄存器以提高性能能 xff0c 需要对函数调用过程中的堆栈帧 xff08 Stack
  • 【GitHub】Branches和Tags分别是做什么用的?

    在 GitHub 中 xff0c Branches xff08 分支 xff09 和 Tags xff08 标签 xff09 都是用于版本控制的重要工具 Branches xff08 分支 xff09 可以用来创建一个新的开发分支 xff0
  • git clone 指定分支

    我们在有一个工程的权限后 xff0c 按照常规操作去拉代码 xff0c 往往会拉到默认的master分支 若我们担心master分支拉下来后 xff0c 与其他代码有冲突 xff0c 想直接拉某分支的代码 xff0c 则该怎么操作呢 1 我
  • rocketmq的消息msgId和offsetMsgId

    1 rocketmq的消息发送时 xff0c producer客户端 生成msgId xff08 通过 ip 43 进程 43 自增值 43 当前与系统启动时间差值 xff09 xff0c 有另外的一个叫法uniqId 方法入口 xff1a
  • 算法 - 桶排序(Bucket Sort)

    执行流程 xff1a 创建一定数量的桶 xff08 比如用数组 链表作为桶 xff09 按照一定的规制 xff08 不同类型的数据 xff0c 规则不同 xff09 xff0c 将序列中的元素均匀分配到对应的桶分别对每个桶进行单独排序将所有