【排序算法】桶排序

server/2025/2/12 2:51:18/
不能排序负数,适合数据较小但数据量较大的时候使用。
  • 定义了0-9十个桶,先排序个位,向高位排序
  • 首先,拿到数值后,先看个位,个位是几就放到对应的桶,以队列的形式进行排列。
  • 从0-9取出数据,先进来的先取走,依次取出
  • 从个位到高位依次进行上述操作。
时间复杂度:O(Kn),K值不能省。运行次数为最大位数×2n
import java.util.Arrays;public class RadixSort {public static void main(String[] args) {int[] arr = {512,77,40,21,809,38,15,6};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr) {// 定义0-9对应的桶int[][] bucket = new int[10][arr.length];// 定义桶记录工具int[] elementCount = new int[10];// 获取最大数值的位数int max = arr[0];for(int x : arr) {if(x>max) {max=x;}}// 转换成字符串,计算字符串的长度int maxLength = (max+"").length();// n 辅助计算位数int n =1;// 循环放入取出maxLength次for(int h = 0;h<maxLength;h++) {// 放入for(int i= 0;i<arr.length;i++) {// 获取个位数值element,也代表要放到哪个桶int element = arr[i]/n%10;// 读取桶记录elementCount当中的数据int count = elementCount[element];// 放入数据bucket[element][count] = arr[i];// 放入后对应的桶记录elementCount+1elementCount[element]++;}// 取出// 记录取出的数据写回数组的位置int index = 0;for(int i =0;i<elementCount.length;i++) {// 读取桶记录中的数值,决定对应桶当中能取出多少数值if(elementCount[i]!=0) {for(int j = 0;j<elementCount[i];j++) {arr[index++]=bucket[i][j];}}// 清空桶记录elementCount[i]=0;}n*=10;}}
}


http://www.ppmy.cn/server/166927.html

相关文章

DeepSeek-R1+对话页面本地部署保姆级教程

deepseek本地部署 第一步&#xff1a;安装ollama 到Ollama官网 https://ollama.com&#xff0c;点击下载&#xff0c;然后选择适合自己系统的版本&#xff0c;这里选择Windows&#xff1a; Download Ollama on Windows 下载完成之后选择安装&#xff0c;安装完成之后任务栏会…

RK3568上使用C++结合V4L2拉流,并RKMPP硬件编解码,并保存为MP4文件

在RK3568平台上使用C结合V4L2捕获视频流&#xff0c;并通过RKMPP进行硬件编码后保存为MP4文件&#xff0c;可以按照以下步骤实现&#xff1a; 1. 环境准备 硬件&#xff1a;RK3568开发板、摄像头模块。软件依赖&#xff1a; Linux内核支持V4L2。Rockchip MPP库&#xff08;RKM…

ViewModel和LiveData

‌ViewModel和LiveData是Android开发中用于管理界面数据的重要组件&#xff0c;它们共同工作以提升应用的稳定性和用户体验。‌ ViewModel ‌ViewModel‌是一个抽象类&#xff0c;旨在以注重生命周期的方式存储和管理界面相关的数据。其主要作用是在配置更改&#xff08;如屏…

esp32 udp 客户端 广播

esp32 udp 客户端 广播 #include "bsp_udpc.h"// #include "com_config.h" // #include "com_xqueue.h"#include "bsp_udpc.h" #define TAG "bsp_udpc"#include <string.h> #include <sys/param.h> #include &q…

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具&#xff0c;由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目&#xff0c;速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰&#xff0c;并且在…

深入理解C#结构型设计模式:类适配器与对象适配器

一、设计模式的基本概念 设计模式是软件开发过程中针对反复出现的问题总结出来的通用解决方案。结构型设计模式主要关注如何将类或对象进行组合&#xff0c;以实现新的功能或满足特定的需求。适配器模式就是结构型设计模式中的一种&#xff0c;它允许将一个类的接口转换成客户…

PDF翻译自动化:利用Make打造反思翻译工作流

PDF翻译自动化&#xff1a;利用Make打造反思翻译工作流 当今这个信息爆炸的时代&#xff0c;你是否曾觉得翻译工作就像一座高山&#xff0c;昂首而立&#xff1f;面对成堆的PDF文档&#xff0c;从提取内容到翻译、再到编辑校对&#xff0c;这一系列任务不仅耗时&#xff0c;还…

webpack配置之---output.clean

output.clean 在 Webpack 5 中&#xff0c;output.clean 配置项是一个新的功能&#xff0c;旨在自动清理输出目录&#xff08;例如 dist 文件夹&#xff09;&#xff0c;在每次构建时删除其中的旧文件。这个配置项使得构建输出更加干净&#xff0c;避免了存留旧的、不再需要的…