package com.lamp.sort;
import java.util.Arrays;
public class RadixSortTest {
public static void main(String[] args) {
int[] data = { 5, 20, 4, 15, 11};
printArray(data);
System.out.println("\r" + "升序排序后-------");
//数组中最多位数为2,设定基数为10进行排序
sortArrayAsc(data, 10, 2);
printArray(data);
//System.out.println("\r" + "降序排序后-------");
//数组中最多位数为2,设定基数为10进行排序
//sortArrayDesc(data, 10, 2);
//printArray(data);
}
//升幂排序
private static void sortArrayAsc(int[] data, int radix, int d) {
//定义一个临时数组大小和data数组相等
int[] temp = new int[data.length];
//定义一个位计数器,用来存放当前位的元素有多少个
int[] bucket = new int[radix];
int rate = 1;
for (int i = 0; i < d; i++) {
//将data数组中的各个元素复制到temp数组中
System.arraycopy(data, 0, temp, 0, data.length);
//将bucket数组的各个元素重置0
Arrays.fill(bucket, 0);
//当i等于0时,原数组为5, 20, 4, 15, 11,个位数的值分别为5,0,4,5,1
//此时bucket数组的值为1,1,0,,0,1,2,0,0,0,0即个位数为0,1,4的数各一个,个位数为5
//的数有两个,并将较大的数置于较后
for (int j = 0; j < data.length; j++) {
int index = (temp[j] / rate) % radix;
bucket[index] += 1;
}
//统计各元素出现位置,拿原数组来说,个位数为0的数出现了一次,位置为1,个位数为1的数也出现了
//一次,此时它的实际位置应该为自身出现个数与0出现个数之和,其余元素位置同理
//经过循环后的bucket数组为1,2,2,2,3,5,5,5,5,5
for (int j = 1; j < bucket.length; j++) {
bucket[j] = bucket[j] + bucket[j - 1];
}
for (int j = data.length - 1; j >= 0; j--) {
//当j等于data.length时,即j=4时,temp[4]=11,index的值为1,由于数组下标值比元素位置小1
//data[--2]=11,即data[1]=11,bucket[index]值减1(由于此位对应的元素已经有一个拍好了顺序)
int index = (temp[j] / rate) % radix;
data[--bucket[index]] = temp[j];
}
//一次循环过后我们可以看到data数组变为20,11,4,5,15,我们可以看到个位数字较大的数排到了较后
//接着rate乘以10并对十位进行相应排序
rate *= radix;
}
}
private static void sortArrayDesc(int[] data, int radix, int d) {
int[] temp = new int[data.length];
int[] bucket = new int[radix];
int rate = 1;
for (int i = 0; i < d; i++) {
System.arraycopy(data, 0, temp, 0, data.length);
Arrays.fill(bucket, 0);
for (int j = 0; j < data.length; j++) {
int index = (temp[j] / rate) % radix;
//降序排序最大的特点就是将位数较大的元素出现次数放在了前面
bucket[9 - index] += 1;
}
for (int j = 1; j < bucket.length; j++) {
bucket[j] = bucket[j] + bucket[j - 1];
}
for (int j = data.length - 1; j >= 0; j--) {
int index = (temp[j] / rate) % radix;
data[--bucket[9 - index]] = temp[j];
}
rate *= radix;
}
}
private static void printArray(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + " ");
}
}
}
相关推荐
STK中的传感器与通信组件:雷达、发射机、接收机与天线的协同建模
本文深入解析了STK软件中传感器、雷达、发射机、接收机与天线的协同建模方法。通过构建一个完整的卫星对地数传系统实例,阐述了各组件如何分工协作,实现从几何指向到射频链路的高保真仿真,为复杂航天通信与探测系统的设计与分析提供了高效、灵活的解决方案。
java之选择排序
package com.lamp.sort; public class SelectSort { public static void main(String[] args) { int[] data = {3,1,10,2,8,4}; sortArray(data); for ...
Figma入门-自动布局
Figma原型图制作内置组件友好,自动布局类似CSS flex,通过布局网格控制对齐、分布、换行等,前端熟悉的同学易上手,参数设置基本一致。
基数排序java_基数排序Java版
基数排序Java版题目和我的前几个排序一样这次是Java版的代码 + 注释package com.vdian.qatest.supertagbiz.test.niu;/*** Created by fengyanhua on 2019/6/28.*/public class sortJiSu {public static void main(String[] args) {int[] arrays...
蜻蜓fm爬虫python
本文介绍了一个用于下载蜻蜓FM音频书籍的Python脚本实现。该脚本主要功能包括:1)通过账号密码登录获取认证信息;2)从目标书籍主页提取版本信息;3)获取书籍节目总数和分页信息;4)生成节目下载链接(使用HMAC-MD5加密算法生成请求签名);5)下载音频文件并保存。脚本采用多种反爬措施:设置User-Agent模拟浏览器行为、使用动态时间戳、HMAC-MD5签名验证等,有效规避简单的反爬机制。整个流程包括登录认证、获取书籍信息、生成下载链接和保存音频文件四个步骤,实现自动化批量下载功能。
AFE芯片做什么用的?AFE(Analog Front End) 模拟前端
AFE采样精度的影响因素非常多,需要综合考虑各种因素,并根据实际应用场景来选择合适的参数和方法。通过减少噪声、提高采样频率、调节放大器增益、降低电源噪声、优化传输线路、进行温度补偿、选择合适的ADC分辨率、根据信号类型选择合适的AFE参数、进行器件匹配和校准等方法,可以提高AFE的采样精度,从而更好地满足各种应用需求。版权声明:本文为优快云博主「czf.Forver」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
JAVA基数排序
Java基数排序 java基数排序,又称为“桶子发”。具体是通过各个键值对应的数组下标,将数据装进桶中(二维数组每一列为一个桶,多个数据为多行)。 1.将待排序的数组中最大的数找出,得到他的长度,即位数。其他较小的数,也以同样位数对待。没有的以“0”代替。例如0001,但是在代码中不需要转为string类型来获取这一结果。使用int digitE = arr[j]/n%10;来获取每位数,没有得...
在 Eclipse 中接入 DeepSeek:开启 Java 开发新效率
DeepSeek 能够根据自然语言描述,精准生成高质量的 Java 代码片段。无论是简单的方法编写,比如 “编写一个 Java 方法,用于计算两个整数的乘积”,还是复杂的类和功能模块创建,例如 “创建一个 Java 类,实现文件的读写操作,并包含异常处理机制”,它都能快速给出合理且可运行的代码示例。DeepSeek 生成的代码不仅实现了基本功能,还遵循 Java 的编码规范,添加了必要的注释,让代码更易于理解和维护,大大节省了开发者从头编写代码的时间和精力。
Java实验基数排序
(5)Java实验基数排序 实验代码: package com.wllarl.suanfa.sort; import java.util.Arrays; //基数排序 public class RadixSort { public static void main(String[] args) { int[] arr = {53,3,542,748,14,214}; radixSort(arr); } public static void ra
Qt5+Ros+GUI界面
在之前建立的工程的基础上添加一个gui界面。 在ros包中新建一个文件夹,名字叫gui 右击gui文件夹添加一个文件,选择Qt->Qt设计师界面类 选择MainWindow 选择下一步 最后在gui中生成三个文件 mainwindow.cpp、mainwindow.h、mainwindow.ui 但此时,这些新创建的文件和原本的ros工程还没建立任何关系,只是目录下多出了几个文件而已...
一键熄火:在 SAP ABAP 平台停用 OAuth 2.0 Client 的正确姿势
本文是一篇面向SAP ABAP平台运维与开发团队的实战指南,重点讲解了OAuth 2.0客户端的停用操作。文章首先阐述了停用的必要性——当客户端存在泄漏风险或配置错误时,停用能在阻断访问的同时保留配置。随后详细介绍了通过SOAUTH2事务码执行停用的具体步骤,并区分了"停用"、"删除"和"撤销令牌"三个关键概念及其适用场景。 文章提供了两个真实案例:一个是怀疑客户端泄漏后的紧急处置流程,另一个是合规审计期间的冻结与恢复操作。最后总结了一份验证清单,
基数排序 java_基数排序简介及Java语言实现
基本思想基数排序(RadixSort)是在桶排序的基础上发展而来的,两种排序都是分配排序的高级实现。分配排序(DistributiveSort)的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。基数排序是一种稳定的排序算法,但有一定的局限性:1、关键字可分解。2、记录的关键字位数较少,如果密集更好3、如果是数字时,最好是无符号的,...
手机端实时检测:YOLOv8n轻量化改进,骁龙865上35FPS,mAP+3.2%
YOLOv8n-Lite的改进不是简单的“砍通道、降分辨率”,而是结合手机端硬件特性(NPU加速、内存限制)和场景需求(小目标检测),通过“卷积拆分减少计算、通道瘦身适配内存、特征强化保留精度”的协同策略,在骁龙865上实现35FPS实时性与mAP+3.2%的双赢。该方案已在手机端AR应用中落地,支持实时手势识别、物体测量等功能,功耗比原始模型降低40%(连续检测1小时仅耗电12%)。
基数排序Java版
基数排序Java版 题目和我的前几个排序一样 这次是Java版的 代码 + 注释 package com.vdian.qatest.supertagbiz.test.niu; /** * Created by fengyanhua on 2019/6/28. */ public class sortJiSu { public static void main(String[] ar...
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
Java基数排序
基数排序(桶排序)介绍: 1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。 2) 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 3) 基数排序(Radix Sort)是桶排序的扩展 4) 基数排序是1887年赫尔曼·何乐礼...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
基数排序法(Java实现)
基数排序也是排序算法的一种,老规矩,先来看看百度百科的定义:基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数...
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
Java实现基数排序算法详解及优化
基数排序(Radix Sort)是一种非比较型整数排序算法,通过将整数按位进行排序来实现。它具有稳定、高效的特点,特别适用于大规模数据的排序。本文将详细讲解如何使用Java实现基数排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将进行时间复杂度分析,并探讨基数排序的优化方法,以进一步提高其性能。基数排序通过按位排序,从最低位到最高位(或从最高位到最低位)逐步进行,最终得到有序数组。它通常使用计数排序作为子过程来实现按位排序。为了更清晰地展示基数排序的过程,以下使用一个简单示例并分
java 基数排序
java基数排序
基数排序 java_Java实现基数排序
基本介绍基数排序属于“分配式排序”,它通过元素的各个位的值,将元素放置对应的“桶”中基数排序属于稳定性排序,效率高,但是过多的元素会出现虚拟机运行内存的不足(千万个元素)基本思想把元素统一为同样长度的数组长度 元素较短的数前面补0,比如(1 15 336 看成 001 015 336)然后从最低位开始,以此进行排序。 代码实现public static void radix_sort...
基数排序(java)
基数排序(Radix Sort)是桶排序的扩展。它的基本思想是: 将整数按位数切割成不同的数字,然后按每个位数分别比较。 具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
【算法】基数排序的原理与Java实现
基数排序(Radix Sort)是一种非比较性的排序算法,它根据元素的位数逐位进行排序。基数排序的核心思想是将待排序的元素按照低位到高位的顺序进行排序,每一位都使用稳定的排序算法(通常是计数排序或桶排序)。通过多次按位排序,最终可以得到有序的结果。方法实现了基数排序的逻辑,通过多次按位排序,将待排序的数组按照低位到高位的顺序进行排序。在每一位的排序过程中,使用计数排序算法对当前位进行排序。以上代码使用基数排序算法对一个整数数组进行排序。时间复杂度为O(d * (n + k))
Java算法-基数排序
基数排序
基数排序 java代码实现
基数排序的基本思想: 设置r个队列(r为进制数,例如十进制r=10),队列编号分别为0,1,2,… ,r-1;首先按数据元素关键字最低位上的数字值依次把n个数据元素分配到r个队列中(入队); 然后按照队列编号从小到大的顺序,将队列中的数据元素收集起来,形成一个新的数据元素序列,这就是第一趟排序。 接着对第一趟基数排序后得到的数据元素序列,再按照数据元素关键字的次低位上的数字值依次把
Java基数排序(可负数)
Java基数排序(可负数) 一、基数排序(radix sort) 基本思想:一个待排序的数组,按个十百千等位数,来划分,这个数组中的最大值是多少位数,就需要排序多少次,从个位数开始,如下图。 参考:思想 、代码 二、思路 i. 开始排个位数 放入的结果为: 取出的结果为: Ii .开始排十位数(以个位数排序过的数组为基数组) 取出的结果为: Iii.百位数排序(以十位数排序过的数组为基数组) 取出的结果为 那么这个排序的最终结果就为 2,7,34,45,67,76,367,508,897。
基数排序(Java)
基数排序 package Sort; import java.util.Arrays; /** * @author lxy * @version 1.0 * @date 2020/10/12 21:46 * 测试基数排序 * 说明: * 基数排序:对要排序的数组进行循环拆分为个位、十位、百位......然后根据每一位的大小分别放入下标为对应数值的数组中 * -------------------------------------- * 测试结果: * 排序前的数组为:[53, 3,
273



被折叠的 条评论
为什么被折叠?



