排序算法-基数排序(含负数)

【数据结构排序算法篇】----基数排序【实战演练】 今天我来继续聊聊数据结构排序算法----基数排序基数排序是一种非比较型整数排序算法,它的工作原理是按照数字的每一位来分配和收集元素。这种排序方式通常用于排序数字(尽管它也可以用于排序其他类型的数据,比如字符串),它可以处理从小到大的各个数字位,这被称作“最低位优先”(LSD)方法,或者从大到小的各个数字位,称为“最高位优先”(MSD)方法。基数排序的基本思想是将所有待比较的数字统一为相同的位数长度,位数较短的数字前面补零。然后,从最低位开始,依次进行一次分配和收集。 阅读详情

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

基数排序(只考虑正数)

    /**
     * 基数排序
     * 只考虑正数
     */
    private void radixSort(int[] nums) {
        int max = nums[0];
        for (int num : nums) {
            if (num > max) {
                max = num;
            }
        }
        int maxDigit = String.valueOf(max).length();
        //初始化桶
        int[][] bucket = new int[10][nums.length];
        //桶元素个数计数器
        int[] bucketCount = new int[10];
        //取位数的因子
        int n = 1;
        //从各位一直到最高位处理
        for (int i = 0; i < maxDigit; i++, n *= 10) {
            //遍历所有元素, 获取所在的bucket, 加入bucket中, 计数器加1
            for (int j = 0; j < nums.length; j++) {
                int index = nums[j] / n % 10;
                bucket[index][bucketCount[index]] = nums[j];
                bucketCount[index]++;
            }
            //取出bucket的元素, 重新放回nums中
            int index = 0;
            for (int j = 0; j < 10; j++) {
                if (bucketCount[j] > 0) {
                    for (int k = 0; k < bucketCount[j]; k++) {
                        nums[index++] = bucket[j][k];
                    }
                }
                //计数器重置为0
                bucketCount[j] = 0;
            }
        }
    }

基数排序(考虑正负数)

    /**
     * 基数排序
     * 考虑正负数
     * 为避免出现负数, 统一所有值减去最小值
     */
    private void radixSort(int[] nums) {
        //求最小值和最大值
        int max = nums[0];
        int min = nums[0];
        for (int num : nums) {
            max = Math.max(num, max);
            min = Math.min(num, min);
        }
        //求最高位数(统一所有值减去最小值)
        int maxDigit = String.valueOf((long)max - min).length();
        int[][] bucket = new int[10][nums.length];
        int[] bucketCount = new int[10];
        int n = 1;
        for (int i = 0; i < maxDigit; i++, n *= 10) {
            for (int j = 0; j < nums.length; j++) {
                //统一所有值减去最小值
                int index = (int)(((long)nums[j] - min) / n % 10);
                bucket[index][bucketCount[index]] = nums[j];
                bucketCount[index]++;
            }
            int index = 0;
            for (int j = 0; j < 10; j++) {
                if (bucketCount[j] > 0) {
                    for (int k = 0; k < bucketCount[j]; k++) {
                        nums[index++] = bucket[j][k];
                    }
                }
                bucketCount[j] = 0;
            }
        }
    }

基数排序算法(正数和负数和小数).zip 本基数排序算法首先要把数据分为正数和负数部分,正数和负数部分又分为带小数部分,然后都转化成正整数的方法排序,最后取反或者都除以某个数;这里包括了基数算法原理word版本和python代码来实现(每行都有注释!) 立即下载

相关推荐

JS逆向实战:从宿务航空机票搜索到参数签名算法解析

在现代Web应用开发中,前端与后端的数据交互安全是核心技术环节。其原理通常涉及参数签名、令牌验证等机制,用于防止未授权访问和数据篡改。这些技术的核心价值在于保障接口调用的合法性与数据完整性,广泛应用于电商、金融、旅行预订等对数据安全要求较高的场景。以机票搜索为例,网站常通过动态生成的签名参数来验证请求来源。本文以宿务太平洋航空为案例,深入解析其搜索请求中关键参数(如signature)的生成逻辑,并演示如何通过浏览器开发者工具进行断点调试、变量追踪,最终使用Node.js与crypto-js库本地复现完整请

weixin_26642481的博客 751

基数排序在处理0和负数时的一种解决思想(C语言)

基数排序的算法思想是按照整数的位数,从最低位到最高位依次排序。 比如我们给定一组待排序的关键字[52,314,68,9,115,20,17]。最高位数是百位。 先对个位进行排序

m0_55098711的博客 874

飞控算法-姿态解算之互补滤波

飞控乱入之姿态解算 姿态解算是通过读取各个传感器的数据进行融合最终得到当前飞行器的姿态,姿态通常用Euler角(Roll-Pitch-Yaw)来表示 姿态解算框架 姿态解算的数据源可来自于陀螺仪或加速度计,他们分别都可以得到当前姿态,但实际上他们都有各自的传感器性能的优缺点,需要取长补短,进行数据融合才能得到真实的姿态,这种方法简称 互补滤波 算法 传感器特性 互补滤波 姿态解...

GoolyOh的专栏 1万+

排序算法笔记:基数排序法,支持负数排序

基数排序法,支持负数排序 1、基本介绍: 1、基数排序法又称为“分配式排序”,他是通过数值的位数的值,将要排序的元素分配到相应的桶中,达到排序的结果,他是桶排序的扩展,是一种效率极高的稳定排序算法。 2、他是一种以空间换时间的经典排序算法,需要大量的电脑内存 3、经过测试,使用基数排序法排序几千万个数据,耗费不到1秒;但是,当排序上亿个数据时,控制台出现内存不足的错误。 Exception in thread "main" java.lang.OutOfMemoryError: Java heap spac

weixin_51542566的博客 2117

超简单的视频换脸,效果相当不错!完全白嫖的技术,来自ComfyUI 官方客户端一键搞定!手把手教会你如何下载安装部署,而且教你如何使用。

如果你电脑上没有安装Visual Studio的C++桌面开发组件,还有Windows应用SDK C++模板,那么你需要自行去下载安装下【安装后默认界面会自动识别系统语言,当然如果你是中文繁体用户,那么你可以在 ComfyUI 的管理器里下载。】并把它放入根目录-models-insightface文件夹内 , 同时下载视频换脸工作流 【分享手把手教你视频换脸,本地部署,轻轻松松当上“电影主角”】,否则insightface无法被正常载入。) 这是换脸必备的工具 ,安装后重启;

TianLeung的博客 2850

光电振荡器(OEO):从原理到应用,解锁高频微波信号新纪元

本文深入解析了光电振荡器(OEO)的核心原理与前沿应用。OEO通过巧妙的光-电-光转换机制,利用光学谐振腔产生高频、高纯度、低相位噪声的微波信号,有效突破了传统电子电路的频率瓶颈。文章详细拆解了其工作流程,并探讨了在雷达系统、高速光通信及精密测量等领域的硬核应用价值。

weixin_29231027的博客 364

基数排序 (桶排序)(含负数)

基数排序(radixsort) 属于“分配式排序”(distributionsort) ,又称“桶子法”(bucket sort) 或binsort, 顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 2)基数排序法是属于稳定 性的排序,基数排序法的是效率高的稳定性排序法 3)基数排序(Radix Sort)是桶排序的扩展 4)基数排序是 1887年赫尔曼●...

Azadoo的博客 2268

手把手教你用Kokoro-82M-v1.1-zh搭建本地TTS服务(含WebSocket接口)

本文详细介绍了如何使用Kokoro-82M-v1.1-zh模型搭建本地TTS服务,包括环境配置、模型部署、WebSocket接口实现及性能优化。通过实战指南,开发者可以快速掌握本地部署TTS系统的关键技术,提升语音交互应用的开发效率。

weixin_30776273的博客 183

基数排序负数处理

C语言实现包含负数的基数排序

weldfb的博客 668

保姆级教程:用NovAtel Inertial Explorer 8.7搞定GNSS/INS紧组合后处理(附避坑指南)

本文提供NovAtel Inertial Explorer 8.7的GNSS/INS紧组合后处理全流程教程,涵盖环境准备、数据转换、基站坐标解算及紧组合处理等关键步骤。特别针对零基础用户,分享实用技巧和常见陷阱,帮助高效完成高精度组合导航数据处理,适用于测绘、自动驾驶等领域。

weixin_42614269的博客 278

FPGA工程师面试——FPGA基础知识24题

线与逻辑是两个输出信号相连可以实现与的功能。在硬件上,要用OC门(集电极开路与非门)来实现,由于不用OC门可能使灌电流过大,而烧坏逻辑门,因此在输出端口应加一个上拉电阻。

FPGA/MATLAB学习教程/源码/项目合作开发 1084

问题 C: 基数排序(内部排序)

主页 讨论版 问题 名次 状态 统计 !!请使用学号注册用户名!! 题目描述 给定一组数据,对其进行基数升序排序。 输入 测试次数t 每组测试数据一行:数字个数n,后跟n个数字(整数) 注:如果序列中有负数,则每个数字加上最小负数的绝对值,使序列中的数均大于等于0。排序后再减去最小负数的绝对值。 输出 对每组测试数据,输出每趟分配、收集的结果。若分配中该位没有数字,输出NULL。具体输出格式见样例。每组测试数据间以空行分隔。 如果序列中有负数,

weixin_52258402的博客 526

为什么先进工艺需要check那么多corner?

那么hold slack = launch clock path delay + data path delay - capture_clock_path_delay = -capture_clock_path_delay,也就是说,capture clock path delay越大,hold越难满足。而且,我们在设计的时候,一般clock频率都会过约,所以是有较大的margin的。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5 sigma的取值范围。

芯冰乐 2084

经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

经典十大排序算法【Java版完整代码】写在前面的话十大排序算法对比冒泡排序快速排序直接选择排序堆排序归并排序插入排序希尔排序计数排序桶排序基数排序 写在前面的话        虽然已经有很多人总结过这十大排序算法,优秀的文章也不少,但是Java完整版的好像不多,还存在某些文章代码存在错误的情况,同时也为了自己练手,决定把所有的写一遍巩固下,同时也真诚的希望阅读到这篇文章的小伙伴们可以自己去从头敲一遍,不要粘贴复制!希望我的文章对你有所帮助

『愚』的博客 3万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

经典十大排序算法(含升序降序,基数排序含负数排序

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_83915900的博客 621

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】

基数排序就是把数按位考虑,让后我们一位数只能是[0,9],就是我们在考虑某位(个位、百位· · ·)的时候就只看这个位的数,放到在[0,9]相应的位置,然后顺序取出,最后再按其它位这样操作(上面说了要不从低位开始到高位,要不就是从高位到低位)**该算法是采用分治法,把数组不断分割,直至成为单个元素,然后比较再合并(合并的过程就是两部分分别从头开始比较,取出最小或最大元素的放到新的区域内,继续取两部分中最大或最小的元素,直到这两部分合并完,最后所有的都合并完,最后形成完整的有序序列)**

2401_85112052的博客 1110

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#排序算法新境界:深度剖析与高效实现基数排序

这个方法首先计算每个数字在当前位上的值(通过除以当前位的位权并取模10得到),然后使用一个计数数组来记录每个值出现的次数。注意,这个实现假设了所有数字都是非负的,并且它们的位数可能不同(通过最高位之前的0来隐含地表示较短的数字)。为了简化,我们假设所有整数都是非负的,并且它们的位数都是相同的(或者我们可以对它们进行补零以使得位数相同)。基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数进行比较。

学习和分享 573

数据结构之常用排序算法(冒泡、选择等)

学会常用排序算法,包括冒泡排序、选择排序、插入排序、归并排序,希尔排序和基数排序

weixin_44885503的博客 1021

【数据结构(六)】希尔排序、快速排序、归并排序、基数排序的代码实现(3)

文章目录1. 希尔排序1.1. 简单插入排序存在的问题1.2. 相关概念1.3. 应用实例1.3.1. 交换法1.3.1.1. 逐步推导实现方式1.3.1.2. 通用实现方式1.3.1.3. 计算时间复杂度1.3.2. 移动法2. 快速排序2.1. 相关概念2.2. 实例应用2.2.1. 思路分析2.2.2. 代码实现2.3. 计算快速排序的时间复杂度3. 归并排序3.1. 相关概念3.2. 代码实现3.3. 计算归并排序的时间复杂度4. 基数排序4.1. 相关概念4.2. 代码实现4.2.1. 逐步推导实

weixin_44883789的博客 1025

排序--07---基数排序

基数排序 定义: 基数排序(radix sort) 属于"分配式排序",又称为"桶子法"(bucket)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些"桶"中,达到排序的作用 原理: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。 然后,从最低位开始,依次进行一次排序。 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 ...

时光里的博客 84

数据结构——排序算法——基数排序

基数排序有两种实现方式。本例属于最高位优先法,思路是从最高位开始,依次对基数进行排序。与之对应的是「最低位优先法」,思路是从最低位开始,依次对基数进行排序。基数排序可以分为以下三个步骤:1.找到数组中的最大值,确定最大数字的位数2.从最低位开始,对数组进行计数排序。计数排序是稳定排序,所以在每一位排序后,相同数值的元素仍然保持相对顺序。3.重复上述步骤,逐渐向更高位进行排序,直到完成所有位的排序。4.最终,数组中的元素将按照各个位上的数值排序,从而得到有序数组.

weixin_43945471的博客 619

十大排序算法之——基数排序(九)带负数

基数排序 排序思想 基数排序是桶排序的一种实现方式,多关键字排序。 对于一组数据,从低位到高位依次排序。 核心代码 private static void radixSort(int[] arr, int len) { //获取数组最大值 int max = arr[0]; for (int i = 1; i < len; i++) { if (arr[i] > max) { max = a

黑桃A的博客 1238

正负数都可排序的基数排序

基数排序,正负数均可 注释很详细,直接挨着看注释 有负数时,只需要 把桶扩大为20即可 ** digit += 10 区分正负数,负数从小到大在 0-9 号桶,正数从小到大在 10 - 19 号桶 private int[] radixSort(int[] arr) { int digitNumber = 1; // 桶,正数和负数共20个桶 i...

qq_41422347的博客 2039

基数排序法处理有负数问题方法

基数排序存在问题对于包含负数和0的数据无法进行排序,本文主要解决方法如下: 将所有的数加一个正数,使得所有的数变为正数进行基数排序; 排序完之后在减点加的正数值输出。 (亲测有效) package RedixSort; import java.util.Arrays; public class redixSort { public static void main(String[] ...

weixin_43139856的博客 5277

必学排序算法——基数排序

基数排序算法是必须掌握的一种基础算法,在一些比较出名的竞赛acm、蓝桥杯,并且在一些公司面试题中都可能会出现,而且作为简单题我们必须要拿下,所以我们要引起重视,下面让我们来深入了解基数排序算法。基数排序(Radix Sort)是一种非比较型整数排序算法,通常用于对数字进行排序。它的基本思想是将数字按位(从最低有效位到最高有效位,或从最高有效位到最低有效位)进行排序,通常使用计数排序或桶排序作为子排序算法。基数排序的时间复杂度为 O(nk),其中 n 是待排序的数字个数,k 是数字的最大位数。

ycs66的博客 3436
下一篇: Roaring64NavigableMap(Bitmap)简单使用
陈*^_^*
博客等级 码龄6年 48粉丝 16原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值