我叫:基数排序【JAVA】

news2024/11/25 5:19:29

1.自我介绍

基数排序(radix sort)属于“分配式排序” (distribution sort),又称“桶子法” (bucket sort)或bin sort,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,是‘桶排序’的扩展

2.基本思想

将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

 3.代码山

 public static void radixSort(int[] array) {

        //1.定义二维数组,表示十个桶
        //2.二维数组包含十个一维数组,防止溢出定义为array.length
        //3.空间换时间
        int[][] bucket = new int[10][array.length];

        //记录每个桶,实际存放多少个数据,定义一个一维数组
        //bucketCounts[0],就是记录bucket[0]桶的放入数据的个数
        int[] bucketCounts = new int[10];

        //得到数组中,最大数的位数
        int max = array[0];//假设数组中,第一个数最大
        for (int i = 1; i < array.length; i++) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        //得到最大数的位数
        int maxLength = (max + "").length();

        for (int i = 0, n = 1; i < maxLength; i++, n *= 10) {
            //第一轮排序(每个元素的个位)
            for (int j = 0; j < array.length; j++) {
                int geWei = array[j] / n % 10;
                bucket[geWei][bucketCounts[geWei]] = array[j];
                bucketCounts[geWei]++;
            }

            //按照这个桶的顺序取
            //遍历每一个桶,把数据放回原数组
            int index = 0;
            for (int k = 0; k < bucketCounts.length; k++) {
                //如果桶中有数据,放回原数组,否则直接pass
                if (bucketCounts[k] != 0) {
                    //循环第k个桶
                    for (int l = 0; l < bucketCounts[k]; l++) {
                        //取出元素放入array中
                        array[index] = bucket[k][l];
                        index++;
                    }
                }
                //第i+1轮后,每个桶置为0
                bucketCounts[k] = 0;
            }
            System.out.println("第"+(i+1)+"轮后:array="+Arrays.toString(array));
        }

    }

4.测试 


        int[] array = new int[]{2,3,4,5,15,19,26,27,36,38,44,46,47,48,50};
        radixSort(array);

5.总结 

加入负数可以发现,程序直接报错

原因:桶的下表是从0开始的,加入负数,会越界 

如果有负数加入排序,就不推荐用基数排序了~~

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

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

相关文章

【图论】重庆大学图论与应用课程期末复习资料(私人复习资料)

考试章节范围 第一章&#xff1a;1.1、1.2、1.3 填空 顶点集和边集都有限的图&#xff0c;称为有限图只有一个顶点的图&#xff0c;称为平凡图边集为空的图&#xff0c;称为空图顶点数为n的图&#xff0c;称为n阶图连接两个相同顶点的边的条数称为边的重数&#xff1b;重数大…

荣耀冲击高端,一边推新「修路」,一边降价「拆桥」

作者 | 辰纹 来源 | 洞见新研社 从2020年11月17日与华为分家&#xff0c;开启独立创业之路&#xff0c;到成功逆袭&#xff0c;今年第三季度以18%的份额重回中国智能手机市场榜首&#xff0c;荣耀用了3年时间。 图源&#xff1a;Canalys 在这三年时间内&#xff0c;荣耀经历…

unity学习笔记07

一、组件 有几个物体他们之间有着重复的功能&#xff0c;该如何避免重复的去写代码&#xff1f; 可以将一些相同的功能写成一个组件&#xff0c;也就是组件就等同于功能。 什么是组件&#xff1f; 在Unity中&#xff0c;游戏物体是不具备任何功能的&#xff0c;如果想要为其…

解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题,全是干货分享

今天我的电脑中突然出现关于“api-ms-win-crt-runtime-l1-1-0.dll”的错误提示&#xff0c;关闭提示后再次打开程序依然不能正常打开&#xff0c;出现这样的问题突然不知道是因为什么&#xff0c;于是就去了解了关于出现api-ms-win-crt-runtime-l1-1-0.dll错误的问题&#xff0…

一款LED段码显示屏驱动芯片方案

一、基本概述 TM1620是一种LED&#xff08;发光二极管显示器&#xff09;驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、基本特性 采用CMOS工艺 显示模式&#xff08;8段6位&#xff5e;10段4位&#xff…

YOLOv5原创改进:全维动态卷积再改进,GCODConv

目录 一、原理 网络结构 二、代码 三、应用到YOLOv5中 一、原理

自定义注解的定义及使用场景

文章目录 1. 自定义注解如何使用2. 自定义注解使用场景2.1 自定义注解使用AOP做权限校验2.2 自定义注解使用AOP记录用户操作日志2.3 自定义注解使用AOP记录接口请求时长 1. 自定义注解如何使用 需要使用interface修饰&#xff0c;加上三个元注解 Documented&#xff1a;生成API…

微信预约小程序制作

对于许多新手来说&#xff0c;制作微信预约小程序可能是一项挑战&#xff0c;但并非不可能。本文将通过详细的步骤&#xff0c;指导您从零开始制作一个微信预约小程序。首先&#xff0c;您需要找一个合适的第三方制作平台或工具&#xff0c;乔拓云网就是其中之一。 找一个合适的…

入门指南:Vue的安装配置和开发环境设置

背景&#xff1a; ​ 这里想讲一讲为什么使用框架&#xff0c;而不使用原生的HTML、CSS、JavaScript写。原生开发虽然灵活&#xff0c;但在大型项目中可能导致代码重复、维护困难等问题&#xff0c;不符合软件工程的"高内聚低耦合"原则。例如&#xff0c;如果每个页…

人工智能 - 图像分类:发展历史、技术全解与实战

目录 一、&#xff1a;图像分类的历史与进展历史回顾深度学习的革命当前趋势未来展望 二&#xff1a;核心技术解析图像预处理神经网络基础卷积神经网络&#xff08;CNN&#xff09;深度学习框架 第三部分&#xff1a;核心代码与实现环境搭建数据加载和预处理构建CNN模型模型训练…

Python异常处理:try语句的应用与技巧

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 异常处理在Python中是至关重要的。try-except是用于捕获和处理异常的核心机制之一。让我们深入了解如何使用try-except&#xff0c;处理各种异常情况。 try-except语句 在编程中&#xff0c;异常是指运行时发生…

linux环境下编译安装OpenCV For Java(CentOS 7)

最近在业余时间学习了一些有关图像处理的代码&#xff0c;但是只能本地处理&#xff0c;满足不了将来开放远程服务的需求。 因此&#xff0c;查找并参考了一些资料&#xff0c;成功在centos7环境安装上了opencv 460。 下面上具体安装步骤&#xff0c;希望能帮到有需要的同学。 …

贝叶斯Python实践

贝叶斯统计学是一种基于贝叶斯定理的概率推理方法&#xff0c;它在机器学习领域得到了广泛的应用。Python作为一门简洁、灵活和易学的编程语言&#xff0c;为贝叶斯统计学的实践提供了强大的工具和库。在本文中&#xff0c;我们将探讨贝叶斯在Python中的实践&#xff0c;包括贝…

数据集笔记 :PEMS-BAY

数据地址&#xff1a;DCRNN - Google 云端硬盘 各station 位置&#xff1a;DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

氪了几百亿,字节游戏停止了“跳动”

目录 一、氪了几百亿&#xff0c;字节游戏停止了“跳动” 二微软推出跨平台框架 ML.NET 3.0 版&#xff1a;强化深度学习、加强AI效率 一、氪了几百亿&#xff0c;字节游戏停止了“跳动” 朝夕光年&#xff0c;扑了 11月26日&#xff0c;脉脉社区的一个截图内容引起大众热议…

简单位运算

文章目录 求 n n n 的第 k k k 位是二进制的几lowbit(n)操作求解 n n n 的最后一个 1 1 1题目练习AcWing 801. 二进制中1的个数CODE1 原码、补码、反码 求 n n n 的第 k k k 位是二进制的几 我们需要用到&运算符&#xff1a;两位都为 1 1 1 时结果才为 1 1 1 &…

easyrecovery如何恢复手机数据及硬盘数据恢复方法

EasyRecovery16是一款优秀的数据恢复软件&#xff0c;不仅能够兼容windows和mac双重系统&#xff0c;同时还能够识别u盘、存储卡、手机等多种数据储存设备&#xff0c;可恢复的文件类型更是多达百余种。还贴心地准备个人版、专业版和企业版的下载&#xff0c;增加了用户的可选性…

超小尺寸安卓主板|迷你主板|联发科MTK安卓小尺寸主板

一款超小尺寸安卓主板&#xff0c;尺寸仅为43.4mm*57.6mm。这款主板采用了联发科12nm制程工艺的芯片(MT6761/MT6762/MT6765/MT8788)&#xff0c;拥有四核/八核64bit A53架构CPU&#xff0c;主频可达2.0GHz&#xff0c;功耗极低&#xff0c;性能卓越。默认内置1G16G内存&#xf…

初次尝到【C知道】的甜蜜

目录 一、场景描述 二、【C知道】使用 三、【C知道】的原理 四、【C知道】的坑 一、场景描述 最近有下面的需求&#xff1a; mysql如何通过命令查看指定表的存储引擎 习惯性在CSDN中搜文章&#xff0c;自己找。 皇天不负有心人&#xff0c;我找到了下面这个内容&#xff0…

AI模型训练——入门篇(二)

导语&#xff1a;本文主要介绍了基于BERT的文本分类方法&#xff0c;通过使用huggingface的transformers库实现自定义模型和任务。具体步骤包括&#xff1a;使用load_dataset函数加载数据集&#xff0c;并应用自定义的分词器&#xff1b;使用map函数将自定义分词器应用于数据集…