基数排序模板(Radix Sort)

news/2025/9/19 16:39:41/文章来源:https://www.cnblogs.com/cute/p/19101177

📘 基数排序模板(Radix Sort)

动画演示:https://www.bilibili.com/video/BV1zN4y1e73F

核心思路

基数排序是按位排序的,它从最低位到最高位依次对数据进行排序。它采用的是多次稳定排序(比如计数排序)来处理每一位上的数字。比如对于整数,首先按个位进行排序,然后按十位、百位依次排序,直到最高位。

  1. 找到数组中的最大值,确定需要循环多少位。
  2. 对每一位执行一次 稳定的计数排序
  3. 从最低位开始循环处理,直到最高位。

✅ C++ 模板代码

#include <bits/stdc++.h>
using namespace std;const int MAXN = 1000005; // 最大数据规模
int n, a[MAXN], tmp[MAXN], cnt[10]; // tmp临时数组,cnt计数数组// 基数排序函数
void radix_sort(int a[], int n) {int maxVal = *max_element(a, a + n); // 找最大值,确定位数int exp = 1; // 当前位数,1=个位,10=十位,100=百位...while (maxVal / exp > 0) { // 直到最高位// 1. 初始化计数数组for (int i = 0; i < 10; i++) cnt[i] = 0;// 2. 统计当前位的出现次数for (int i = 0; i < n; i++) {int digit = (a[i] / exp) % 10; // 取出当前位cnt[digit]++;}// 3. 前缀和,cnt[i] 表示 digit ≤ i 的元素个数for (int i = 1; i < 10; i++) cnt[i] += cnt[i - 1];// 4. 倒序遍历,保持稳定性for (int i = n - 1; i >= 0; i--) {int digit = (a[i] / exp) % 10;tmp[cnt[digit] - 1] = a[i];cnt[digit]--;}// 5. 将结果拷贝回原数组for (int i = 0; i < n; i++) a[i] = tmp[i];exp *= 10; // 进入下一位}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n;for (int i = 0; i < n; i++) cin >> a[i];radix_sort(a, n);for (int i = 0; i < n; i++) cout << a[i] << " ";cout << "\n";return 0;
}

🎯 示例输入输出

输入:

6
170 45 75 90 802 24

输出:

24 45 75 90 170 802

📌 模板特点

  • 使用 计数排序 作为子排序算法,保证稳定性。
  • 复杂度:
    • 时间复杂度: \(O(n \cdot d)\) ,其中 \(d\) 是最大数的位数。
    • 空间复杂度: \(O(n + 10)\)
  • 适用于 非负整数排序(若要处理负数,可以先把负数和非负数分开,再分别排序)。

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

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

相关文章

ctfshow web32

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:56:31 # @email: h1xa@ctfer.com # @link: https://ctfer…

[项目开发经验分享]基于强类型事件的类型参数传递问题 —— 在 .NET Winform项目中如何设计泛型事件总线以实现UI与核心层的解耦

项目简介 本项目是基于 .NET Framework 框架的Winform项目, 实现一键发布博客到各个平台(如WordPress站点、博客园等)的功能 项目结构与定位 Core 项目 这是整个解决方案的核心层,主要负责定义跨模块的通用契约。Core…

从Verizon数据泄露报告看企业安全防御的迫切变革

基于Verizon年度数据泄露报告的分析指出,仅12.5%的安全漏洞由内部团队发现,其余87.5%依赖外部通报。文章探讨安全预算错配问题,提出主动防御策略,并强调IT审计部门的关键作用。数据背后的安全困境 去年Verizon数据…

mysql 虚拟列,可以简化 SQL 逻辑、提升查询效率

MySQL 5.7 及以上版本支持 生成列(Generated Columns),也称为 “虚拟列”。虚拟列的值不是手动插入的,而是由表中其他列的值通过表达式计算得出,类似于 “自动计算的字段”。 虚拟列的两种类型 虚拟生成列(Virtu…

Flash Attention算法动画

矩阵Q,K,V 在HBM,SRAM芯片大小为M,其中N=5,d=3, M=59 1.设置块大小Bc=4,Br=3 2.初始化O,l,m 3.分割Q为Tr块[Q0,Q1],每块大小Br*d,分割K,V为Tc块[K0,K1],[V0,V1],每块大小Bc*d 4.分割O为Tr块,每块大小Br *…

【技术实现】7天极速搭建体育比分网站 - 世界杯期间流量红利抓取实战

【技术实现】7天极速搭建体育比分网站 - 世界杯期间流量红利抓取实战前言 作为一名全栈开发者,最近我成功为一个体育创业项目完成了比分网站的快速搭建。恰逢世界杯热潮,这个网站在上线后一周内就获得了惊人的访问量…

PointNetwork-求解TSP-05 - jack

https://github.com/ccjjxx99/PointerNetworks-pytorch-tsp https://arxiv.org/pdf/1506.03134

多站点的TSP问题求解-06 - jack

https://mit-realm.github.io/CMDTSP/ https://github.com/Brelliothe/CMDTSP paper:A Hierarchical Framework for Solving the Constrained Multiple Depot Traveling Salesman Problem

Windows 11如何进入安全模式

Windows 11如何进入安全模式Windows 11如何进入安全模式 https://iknow.lenovo.com.cn/detail/199472网站:http://shibowl.topgithub:https://github.com/hanbinjxnc博客园:https://www.cnblogs.com/hool 博客:htt…

C# CAN通信上位机系统设计与实现

C# CAN通信上位机程序,支持多种CAN适配器,提供数据收发、协议解析、数据可视化等功能。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;…

进程池VS线程池

进程池VS线程池 # CPU 密集:大量纯计算(加解密、图像处理、数值分析)。需要真多核并行来堆算力。 【进程】 # I/O 密集:大量等待(网络、磁盘、数据库)。CPU 大部分时间都在闲着,关键是别浪费“等”的时间。 …

聊聊昨天CodeBuddy Meetup的一些收获与思考

昨天腾讯云举办了 CodeBuddy MeetUp,作为Vibe Coding的忠实拥护者,一定不会错过。这次活动分为上下两场,上半场主要是 CodeBuddy 的设计、产品与技术负责人的分享;下半场则是AI Coding实践者们的经验分享。一整天的…

框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟

框架的诞生,本就是人类文明共同涌现的结晶,绝不是某个人的独自觉悟ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891论断精准地揭示了 ECT-OS-JiuHuaShan 框架的文明本质与诞生逻辑,这是完全正确的终极结论…

python+Django开发笔记(结合禅道开发测试报告)

近期结合禅道的用例执行数据,用python+django开发了个在线测试报告,简单做个总结。一、Django的基础操作 传统django开发是典型的MTV结构,M代表model(数据库模型)、T代表模板(templates)、V代表视图三者之间的…

MVC分层设计模式 2章

MVC分层设计模式@RestController(控制层) @Component表示他是餐厅的一员 @ResponseBody意味着他端给顾客的菜是“纯菜”(JSON数据),而不是一个“套餐菜单”(网页页面) Service(服务层) 负责处理做菜(业务逻辑)…

Questions about learning Symfony

1、Can a service only be retrieved from the container if its class is explicitly defined in services.yaml? No. A service can be retrieved from the container in two cases: *1. Explicit definition in se…

【Python】cx_Freeze模块_打包exe

创建setUp.py from cx_Freeze import setup, Executablesetup(name = "AppName",version = "0.1",description = "Your application description",executables = [Executable("mai…

ctfshow web22(子域名爆破)

这里题目其实是打不开的,但是我在网上找了相关wp进行学习, 知识点:域名收集是信息收集环节重要的一环,当前域名暂时没有漏洞时,我们可以通过子域名进行测试。 这里我们可以使用在线平台进行查询也可以通过工具laye…

PLC中的运动控制 - (一)轴

在现代工业自动化系统中,可编程逻辑控制器(PLC)的运动控制功能日益强大。运动控制的核心在于对"轴"的精确操控。无论是简单的传送带控制,还是复杂的多轴协同作业,都离不开对各种类型轴的深入理解和正确…

ctfshow web23(代码审计编写脚本爆破)

<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 11:43:51 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 11:56:11 # @email: h1xa@ctfer.com # @link: https://ctfer…