排序算法---桶排序
原创不易,转载请注明出处。欢迎点赞收藏~
桶排序(Bucket Sort)是一种排序算法,它将待排序的数据分到几个有序的桶中,每个桶再分别进行排序,最后将各个桶中的数据按照顺序依次取出,即可得到有序序列。
具体步骤如下:
- 首先确定桶的个数和每个桶的取值范围。通常会根据输入数据的特点来确定桶的个数,例如数据的分布情况、数据量等。
- 将待排序的数据依次放入对应的桶中。可以使用映射函数将待排序数据映射到桶中,或者直接使用数据本身作为桶的索引。
- 对每个非空的桶进行排序。可以使用插入排序、快速排序、归并排序等排序算法对每个桶中的数据进行排序。
- 将各个桶中的数据按照顺序依次取出,即可得到有序序列。
桶排序的时间复杂度取决于对每个桶内部数据进行排序的时间复杂度。假设有n个元素,将它们均匀地分到m个桶中,那么每个桶中平均有n/m个元素。如果对每个桶采用快速排序等线性时间复杂度的排序算法,则桶排序的时间复杂度为O(n+m),其中n为待排序数据的个数,m为桶的个数。如果n和m接近相等,则时间复杂度近似为O(n)。
桶排序的空间复杂度取决于桶的个数和每个桶中数据的个数。通常情况下,桶排序的空间复杂度为O(n+m),其中n为待排序数据的个数,m为桶的个数。如果n和m接近相等,则空间复杂度近似为O(n)。
需要注意的是,桶排序适合用于待排序数据分布比较均匀的情况,如果数据分布不均匀,可能会导致某些桶中的数据量过大,从而影响排序效果。
以下是一个使用C语言实现的桶排序示例:
#include <stdio.h>// 桶排序函数
void bucket_sort(int arr[], int n, int max)
{// 创建桶数组int buckets[max + 1];// 初始化桶数组for (int i = 0; i <= max; i++){buckets[i] = 0;}// 将元素放入对应的桶中for (int i = 0; i < n; i++){buckets[arr[i]]++;}// 从桶中取出元素并排序int index = 0;for (int i = 0; i <= max; i++){while (buckets[i] > 0){arr[index++] = i;buckets[i]--;}}
}int main()
{int arr[] = {5, 2, 8, 9, 1};int n = sizeof(arr) / sizeof(arr[0]);int max = 9; // 假设最大值为9printf("排序前的数组:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}bucket_sort(arr, n, max);printf("\n排序后的数组:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}putchar('\n');return 0;
}
上述代码中,首先定义了一个bucket_sort函数,用于实现桶排序。这个函数接受三个参数:待排序数组arr、数组长度n和最大值max。
在函数内部,首先创建了一个长度为max+1的桶数组buckets,并将其初始化为0。然后,遍历待排序数组,将每个元素放入对应的桶中,即对应索引位置上的数值加1。
接下来,使用两层循环从桶中取出元素,并按照顺序存放到原始数组arr中。外层循环遍历桶数组,内层循环根据桶中记录的数量,将元素按照顺序放入原始数组,同时将桶中记录数量减1。
在main函数中,定义了一个待排序的数组arr,然后调用bucket_sort函数进行排序。最后,输出排序前后的数组结果。
这段代码的核心思想是按照待排序数据的取值范围创建相应数量的桶,将数据按照取值映射到桶中,并对每个桶中的数据进行排序后,再依次取出合并为有序序列。
运行如上代码,你可以看到以下输出:

相关文章:
排序算法---桶排序
原创不易,转载请注明出处。欢迎点赞收藏~ 桶排序(Bucket Sort)是一种排序算法,它将待排序的数据分到几个有序的桶中,每个桶再分别进行排序,最后将各个桶中的数据按照顺序依次取出,即可得到有序序…...
FPGA_工程_基于rom的vga显示
一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…...
代码随想录算法训练营第31天|● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和
文章目录 理论基础分发饼干思路:代码: 摆动序列思路一 贪心算法:代码: 思路二:动态规划(想不清楚)代码: 最大子序和思路:代码: 理论基础 贪心算法其实就是没…...
无人机地面站技术,无人机地面站理论基础详解
地面站作为整个无人机系统的作战指挥中心,其控制内容包括:飞行器的飞行过程,飞行航迹, 有效载荷的任务功能,通讯链路的正常工作,以及 飞行器的发射和回收。 无人机地面站总述 地面站作为整个无人机系统的作战指挥中心…...
2024.2.13
21.C 22.D 23.B 5先出栈表示1,2,3,4已经入栈了,5出后4出,但之后想出1得先让3,2先后出栈,所以 B 不可能 24.10,12,120 25.2,5 26.可能会出现段错误…...
论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走
论文:Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习:AMP,baseline方法,TO 摘要: 介绍了一种新颖的系统,通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地…...
.NET Core WebAPI中封装Swagger配置
一、创建相关文件 创建一个Utility/SwaggerExt文件夹,添加一个类 二、在Program中找到Swagger相关配置信息 三、添加方法,在Program中调用 在SwaggerExt类中添加方法,将相关配置添写入 /// <summary> /// swagger配置 /// </sum…...
28. 找出字符串中第一个匹配项的下标
Problem: 28. 找出字符串中第一个匹配项的下标 文章目录 思路解题方法复杂度Code 思路 这个问题可以通过使用KMP(Knuth-Morris-Pratt)算法来解决。KMP算法是一种改进的字符串匹配算法,它的主要思想是当子串与目标字符串不匹配时,能…...
宿舍|学生宿舍管理小程序|基于微信小程序的学生宿舍管理系统设计与实现(源码+数据库+文档)
学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)学生信息管理 (2)公告信息管理 (3)宿舍信息管理 &am…...
CVE-2022-25487 漏洞复现
漏洞描述:Atom CMS 2.0版本存在远程代码执行漏洞,该漏洞源于/admin/uploads.php 未能正确过滤构造代码段的特殊元素。攻击者可利用该漏洞导致任意代码执行。 其实这就是一个文件上传漏洞罢了。。。。 打开之后,/home路由是个空白 信息搜集&…...
C#面:强类型和弱类型
强类型 强类型是指在编程语言中,变量必须明确声明其数据类型,并且在编译时会进行类型检查的特性。它可以提高代码的可读性和可维护性,但有时需要显式地进行类型转换。换句话说,强类型语言要求变量的类型在编译时就要确定…...
nodejs和npm和vite
Nodejs 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境 用途: Node.js 可以被看作是一个 JavaScript 运行时环境,专门用于在服务…...
相机图像质量研究(24)常见问题总结:CMOS期间对成像的影响--摩尔纹
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
Redis -- 数据库管理
目录 前言 切换数据库(select) 数据库中key的数量(dbsize) 清除数据库(flushall flushdb) 前言 MySQL有一个很重要的概念,那就是数据库database,一个MySQL里面有很多个database,一个datab…...
蓝桥杯(Web大学组)2023省赛真题:视频弹幕
思路: 主要是要仔细阅读题目以及理解给出的已有代码,进行函数间的调用、定时器的使用、元素移除、清除定时器等,注意细节。 笔记: height不要写成hight设置left时,记得加单位px可以获取left的值进行计算,但要注意sp…...
真假难辨 - Sora(OpenAI)/世界模拟器的技术报告
目录 引言技术报告汉译版英文原版 引言 Sora是OpenAI在2024年2月15日发布的世界模拟器,功能是通过文本可以生成一分钟的高保真视频。由于较高的视频质量,引起了巨大关注。下面是三个示例,在示例之后给出了其技术报告: tokyo-wal…...
Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试
1、采用程序配置关闭“内核模块验证” 默认配置文件“stm32mp1_atk_defconfig”路径为“arch/arm/configs”; 使用VSCode打开默认配置文件“stm32mp1_atk_defconfg”,然后将下面的4条语句屏蔽掉,如下: CONFIG_MODULE_SIGy CONFIG_MODULE_…...
ctfshow-web21~28-WP
爆破(21-28) web21 题目给了一个zip文件,打开后解压是爆破的字典,我们抓包一下网址看看 发现账号和密码都被base64了,我们发送到intruder模块,给爆破的位置加上$符圈住 去base64解码一下看看格式...
鸿蒙开发系列教程(二十四)--List 列表操作(3)
列表编辑 1、新增列表项 定义列表项数据结构和初始化列表数据,构建列表整体布局和列表项。 提供新增列表项入口,即给新增按钮添加点击事件。 响应用户确定新增事件,更新列表数据。 2、删除列表项 列表的删除功能一般进入编辑模式后才可…...
线性代数笔记2--矩阵消元
0. 简介 矩阵消元 1. 消元过程 实例方程组 { x 2 y z 2 3 x 8 y z 12 4 y z 2 \begin{cases} x2yz2\\ 3x8yz12\\ 4yz2 \end{cases} ⎩ ⎨ ⎧x2yz23x8yz124yz2 矩阵化 A [ 1 2 1 3 8 1 0 4 1 ] X [ x y z ] A \begin{bmatrix} 1 & 2 & 1 \\ 3 & …...
Mask2Former与MaskFormer对比分析:第二代模型的改进与创新点
Mask2Former与MaskFormer对比分析:第二代模型的改进与创新点 【免费下载链接】Mask2Former Code release for "Masked-attention Mask Transformer for Universal Image Segmentation" 项目地址: https://gitcode.com/gh_mirrors/ma/Mask2Former M…...
群晖ARPL界面IP显示正常但Synology Assistant搜不到?试试这5个排查步骤
群晖ARPL界面IP显示正常但Synology Assistant搜不到的深度排查指南 当你兴奋地完成黑群晖的ARPL引导安装,在启动界面看到系统已经成功获取IP地址,却突然发现Synology Assistant工具死活搜不到这个IP时,那种从云端跌入谷底的感觉我太熟悉了。这…...
GitHub Copilot 默认启用训练之后 企业安全如何应对
文章目录前言一、这次政策改动,到底改了什么二、为什么企业不能只看“Business 和 Enterprise 不受影响”三、content exclusion 为什么挡不住所有风险四、从 IDE 到 Agent,企业研发边界已经变了五、企业现在就该做的几件事总结前言 GitHub 这次关于 Co…...
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧
图像处理中的频域魔法:用傅里叶变换消除噪点与增强细节的3种技巧 当你在处理一张模糊的医学影像或卫星图片时,是否想过那些隐藏在像素背后的频率秘密?傅里叶变换就像一台精密的频谱分析仪,能将图像从空间域转换到频域,…...
RMBG-2.0异常处理指南:解决常见部署与运行问题
RMBG-2.0异常处理指南:解决常见部署与运行问题 抠图工具用得好好的,突然给你来个报错,或者生成的结果莫名其妙,是不是特别让人头疼?尤其是像RMBG-2.0这样效果出色的工具,一旦出问题,很多人就不…...
3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南
3步掌握MelonLoader:面向Unity开发者的游戏扩展加载器实战指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader Unit…...
WPF实战:用LiveCharts打造实时监控曲线(附动态数据刷新技巧)
WPF实战:用LiveCharts打造高性能实时监控曲线 在工业自动化、物联网监控等场景中,实时数据可视化是核心需求之一。想象一下,当数百个传感器数据以毫秒级频率涌向系统时,如何让曲线图既流畅又精准?传统WPF图表在高频数…...
Cursor规则太多跑得慢?手把手教你优化.cursor配置,给VSCode插件‘减负’提速
Cursor性能优化实战:让智能编码助手重获流畅体验 当你的指尖在键盘上飞舞时,最令人沮丧的莫过于等待工具响应。作为深度集成AI能力的现代编码环境,Cursor在提供智能补全和代码建议的同时,也可能因为规则膨胀而逐渐变得迟缓。我曾见…...
OpenClaw+nanobot备份方案:自动化配置与数据同步
OpenClawnanobot备份方案:自动化配置与数据同步 1. 为什么需要备份nanobot环境 上周我的开发机突然硬盘故障,导致辛苦配置了两个月的nanobot环境全部丢失。那一刻我才深刻意识到,对于这种高度定制化的AI自动化系统,没有备份方案…...
10G以太网Subsystem避坑指南:复位敏感性与时钟配置的实战经验
10G以太网Subsystem避坑指南:复位敏感性与时钟配置的实战经验 在高速网络设备开发中,10G以太网Subsystem的稳定性直接决定了系统性能上限。经历过三次产品迭代后,我发现80%的链路故障都可追溯到复位时序和时钟配置问题——这两个看似基础的环…...
