基数排序 Java 实现 + 思路详解 一、核心思路基数排序属于分配式排序不基于元素比较 思想按位数依次排序从低位到高位最低位优先 LSD流程获取数组中最大值确定最大有多少位准备 0~9 共 10 个桶代表数字当前位 0-9依次对 ** 个位、十位、百位……** 进行一轮桶排序根据当前位数字把元素放入对应桶按桶顺序依次取出元素覆盖原数组所有位数处理完成数组整体有序。⚠️特性面试重点时间复杂度\(O(k\times n)\)n 元素个数k 最大数字位数数据量大、位数少时效率极高稳定排序需要额外空间只适合非负整数负数需要额外处理不属于比较排序二、完整 Java 代码LSD 最低位优先java运行import java.util.Arrays; public class RadixSort { public static void main(String[] args) { int[] arr {53, 3, 542, 748, 14, 214, 154, 61, 666}; System.out.println(排序前 Arrays.toString(arr)); radixSort(arr); System.out.println(排序后 Arrays.toString(arr)); } public static void radixSort(int[] arr) { if (arr null || arr.length 1) { return; } // 1. 获取数组最大值确定最大位数 int max arr[0]; for (int num : arr) { if (num max) { max num; } } // 二维数组10个桶每个桶存放元素 // bucket[0] 存当前位为0的数字 ... bucket[9]存9 int[][] bucket new int[10][arr.length]; // bucketElementCounts[i]记录第i个桶当前存放多少个元素 int[] bucketElementCounts new int[10]; // 循环处理每一位个位、十位、百位... for (int digit 1; max / digit 0; digit * 10) { // 【第一步放入桶中】 for (int num : arr) { // 取出当前位的值 int remainder num / digit % 10; bucket[remainder][bucketElementCounts[remainder]] num; bucketElementCounts[remainder]; } // 【第二步从桶中依次取出放回原数组】 int index 0; for (int i 0; i 10; i) { // 当前桶不为空 if (bucketElementCounts[i] 0) { for (int k 0; k bucketElementCounts[i]; k) { arr[index] bucket[i][k]; } } // 清空桶计数下一轮复用 bucketElementCounts[i] 0; } } } }三、简单推演示例数组[53, 3, 542, 748, 14]第一轮个位排序个位3,3,2,8,4 入桶顺序取出 →[542,53,3,14,748]第二轮十位排序十位4,5,0,1,4 取出 →[3,14,542,748,53]第三轮百位排序百位0,0,5,7,0 取出 →[3,14,53,542,748]完成排序四、注意事项上面代码仅支持非负整数 如果要支持负数可以把数字分成正数、负数两组负数取绝对值排序反转后加上负号再合并。桶的实现方式除二维数组外也可以用ListInteger[] buckets写法更简洁基数排序适合手机号、身份证、数字编号等固定长度数字场景。拓展List 简化版本可读性更强推荐面试手写备选java运行import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class RadixSortList { public static void main(String[] args) { int[] arr {53, 3, 542, 748, 14, 214, 154, 61, 666}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public static void radixSort(int[] arr) { int max arr[0]; for (int num : arr) max Math.max(max, num); ListInteger[] buckets new List[10]; for (int i 0; i 10; i) { buckets[i] new ArrayList(); } for (int digit 1; max / digit 0; digit * 10) { // 入桶 for (int num : arr) { int r num / digit % 10; buckets[r].add(num); } // 回写数组 int idx 0; for (ListInteger bucket : buckets) { for (Integer val : bucket) { arr[idx] val; } bucket.clear(); } } } }

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/10/2 15:29:32
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻