排序系列 之 基数排序

news2024/11/18 11:20:07
  • !!!排序仅针对于数组哦
  • 本次排序是按照升序来的哦

介绍

  • 基数排序(RadixSort)又称桶子法,是一种非比较型整数排序算法。其原理是将整数按位数切割成不同的数组,然后按每个位数分别比较,通过简直的各个位的值,将要排序的元素分配至某些“桶”中。
    (是不是看着有点懵,不急,咱看基本思路,可以结合过程图看哦😊)

思路图

  • 先来个数组:int[] arr = {1260,134,209,408,34,68907,29,1034,51,855,2,33,566,7,12};

  • 带有阴影色的算是个小进阶,第一遍看时忽略掉阴影数值,第二次可以带上阴影数值一起看~

    本人呢开始对最大位数后边排序有点怀疑,然后就添加了个有阴影色的数值,用来判断对于相同位数的值,最后一次会不会排好序,算是个小进阶吧

在这里插入图片描述

整理整理思路

  • 需要定义一个二维数组,包含是个桶,每个桶的长度为数组的长度(最坏情况下,所有的数值都到一个桶里了):
    int[][] bucket = new int[10][arr.length];
    
  • 需要再来一个数组,用来记录每个桶内的数据长度,即往桶内放入数据时应放入的位置
    int[] elementCount = new int[10];
    
  • 找到数组中的最大值,并确认最高位,也就是需要遍历的次数
    int MAX_NUM;
    int lenNum = (MAX_NUM+"").length();
    
  • 定义一个除数因子,初始化为1
    int factor = 1;
    
  • 然后就是开始遍历,放入数据,取出数据,然后除数因子*10
  • 思路捋顺,开始走代码吧~

代码

public class RadixSort {
    public static void main(String[] args) {
        int[] arr = {1260,134,209,408,34,68907,29,1034,51,855,2,33,566,7,12};
        int[] arr2 = {1260,68909,134,209,72311,408,34,68907,29,1034,51,855,2,33,566,7,12};
        sort(arr);
        sort(arr2);
        System.out.println("arr:"+Arrays.toString(arr));
        System.out.println("arr2:"+Arrays.toString(arr2));
    }

    public static void sort(int[] arr){
        // 定义桶,用来存放个位、十位、百位...等取余的数值
        int[][] bucket = new int[10][arr.length]; // 10个桶,每个桶的长度不确定,最差情况是都去一个桶了
        // 定义桶记录,用来记录桶内数据长度
        int[] elementCount = new int[10];  // 一维数组长度是10,每个数代表每个桶的有效数据长度

        // 找到数组中的最大值,用来确定取余需要几次
        int MAX_NUM = arr[0];  // 假设第一个是最大值
        for(int i=1;i<arr.length;i++){
            if(arr[i]>MAX_NUM){
                MAX_NUM = arr[i];
            }
        }
        // 计算最大数的长度
        int lenNum = (MAX_NUM+"").length();
        // 定义一个除数因数
        int factor = 1;

        // 开始操作数据,首先确定要计算几次
        for(int m=0;m<lenNum;m++){
            // 数据放入
            for(int i=0;i<arr.length;i++){
                int element = arr[i]/factor%10;  // 取余后的数值,即要放到的桶的位置
                int count = elementCount[element]; // 先找到要放入的桶的位置
                bucket[element][count] = arr[i];
                elementCount[element]++;  // 桶的位置需要增加,但是每次进来count是刚刚获取到的,所以不能使用count++
            }

            // 数据取出
            // 首先定义一个变量用来指向原数组的下标,因为数据取出来需要写回原数组
            int index = 0;
            for(int i=0;i<10;i++){
                if(elementCount[i]!=0){ // 判断桶的长度,只有不是空的时候才会读取数据
                    // 开始读取数据
                    for(int j=0;j<elementCount[i];j++){ // 第i个桶,从0开始读取
                        arr[index] = bucket[i][j];  // 第i个桶,第j个位置,依次写入数据中,下标就是index
                        index++;
                    }
                }
                // 读取完毕后需要将记录变更为0,因为下一轮的时候是从0开始存储的
                elementCount[i] = 0;
            }

            // 变更取余的对象
            factor = factor*10;
        }
    }
}
-------------------------运行结果----------------------------
arr:[2, 7, 12, 29, 33, 34, 51, 134, 209, 408, 566, 855, 1034, 1260, 68907]
arr2:[2, 7, 12, 29, 33, 34, 51, 134, 209, 408, 566, 855, 1034, 1260, 68907, 68909, 72311]

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

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

相关文章

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xf…

DMv8共享存储集群部署

DMv8共享存储集群部署 环境说明 操作系统&#xff1a;centos7.6 服务器&#xff1a;2台虚拟机 达梦数据库版本&#xff1a;达梦V8 安装前准备工作 参考达梦官方文档&#xff1a;https://eco.dameng.com/document/dm/zh-cn/ops/DSC-installation-cluster.html#%E4%B8%80%E3…

0725,进程间传递文件描述符,socketpair + sendmsg/recvmsg

我要碎掉了我要碎掉了我要碎掉了 上课喵&#xff1a; pipe匿名管道的问题 #include <func.h>int main() {int fds[2];pipe(fds);pid_t pidfork();if(pid>0){ //fatherclose(fds[0]);//close readint fdopen("file2.txt",O_RDONLY);printf("father: …

Jsoup爬虫——自学习梳理

——项目已完结&#xff08;源码在文末&#xff09; 一个较大的项目&#xff0c;通过后台进行网站爬虫&#xff0c;选择的是一个招聘类型的网站&#xff0c;爬取数据后会选择一部分放入到我们的数据库中&#xff0c;前台通过后台返回的Json数据进行展示&#xff1b;大概就是这样…

CSS(五)——CSS Fonts(字体)

CSS 字体 CSS字体属性定义字体&#xff0c;加粗&#xff0c;大小&#xff0c;文字样式。 CSS字型 在CSS中&#xff0c;有两种类型的字体系列名称&#xff1a; 通用字体系列 - 拥有相似外观的字体系统组合&#xff08;如 "Serif" 或 "Monospace"&#x…

mysql特殊字符、生僻字存储设置

mysql utf-8模式下&#xff0c;分为ut8mb3,utf8mb4&#xff0c;mb4是支持特殊字符、emoji表情的&#xff0c;mb3是不支持的。 报错信息&#xff1a; 1### Error updating database. Cause: java.sql.SQLException: Incorrect string value: \xF0\xA8\x92\x82\xE6\x95... fo…

vue3+ts+vite+electron+electron-packager打包成exe文件

目录 1、创建vite项目 2、添加需求文件 3、根据package.json文件安装依赖 4、打包 5、electron命令运行 6、electron-packager打包成exe文件 Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron 1、创建vite项目 npm create vitelatest 2、添…

hipBLAS示例程序

GPT-4o (OpenAI) 当然&#xff01;以下是一个简单示例&#xff0c;展示了如何使用hipBLAS库进行矩阵-向量乘法 (GEMV) 的操作。该示例包括初始化 hipBLAS 环境&#xff0c;设置矩阵和向量数据并调用hipBLAS API来执行操作。 首先&#xff0c;确保你已经安装了 ROCm&#xff08…

PYTHON学习笔记(八、字符串及的使用)

目录 1、字符串 1.1、字符串的常用操作 1.2、格式化字符串 1.2.1、占位符格式化字符串 1.2.2、f-string格式化字符串 1.2.3、str.format( )格式化字符串 1.3、数据的验证 1.4、正则表达式 1.5.1元字符 1.5.2限定符 1.5.3其他字符 1.5.4re模块 1、字符串 1.1、字符…

如何安全的申请SSL证书

随着数字化时代的快速发展&#xff0c;互联网政务应用已成为政府服务民众、提升治理效能的重要途径。在这个网络日益复杂的时代&#xff0c;政务网站的安全问题显得尤为重要。2024年&#xff0c;国家出台并从2024年7月1日开始实施执行《互联网政务应用安全管理规定》&#xff0…

系统移植(一)u-boot相关命令

文章目录 一、概念&#xff08;一&#xff09;GNU相关命令的扩展(二进制工具集)&#xff08;二&#xff09;1. ld命令&#xff1a;将.o文件链接生成.elf格式文件2. objcopy命令&#xff1a;格式化拷贝命令&#xff0c;将.elf格式文件格式化拷贝生成.bin文件3. objdump命令&…

idea中项目目录,文件显示不全问题

问题&#xff1a;idea中项目目录显示不全问题 解决办法1&#xff1a; 删除目录中的.idea文件 用idea重新打开文件就行了 办法2&#xff1a;手动导入为maven项目 1. 2. 3. 4.选择要导入的项目&#xff0c;导入为maven

vue3前端开发-小兔鲜项目-登录组件的开发表单验证

vue3前端开发-小兔鲜项目-登录组件的开发表单验证&#xff01;现在开始写登录页面的内容。首先这一次完成基础的首页按钮点击跳转&#xff0c;以及初始化一些简单的表单的输入验证。后期还会继续完善内容。 1&#xff1a;首先还是准备好login页面的组件代码内容。 <script …

四、GD32 MCU 常见外设介绍(8)SPI 模块介绍

串行外设接口&#xff08;Serial Peripheral Interface&#xff0c;缩写为 SPI&#xff09; 提供了基于SPI 协议的数据发送和接收功能&#xff0c; 可以工作于主机或从机模式。 SPI 接口支持具有硬件 CRC 计算和校验的全双工和单工模式。 8.1.SPI 基础知识 SPI 物理层 SPI接…

Pytorch使用教学7-张量的广播

PyTorch中的张量具有和NumPy相同的广播特性&#xff0c;允许不同形状的张量之间进行计算。 广播的实质特性&#xff0c;其实是低维向量映射到高维之后&#xff0c;相同位置再进行相加。我们重点要学会的就是低维向量如何向高维向量进行映射。 相同形状的张量计算 虽然我们觉…

自动驾驶(八十八)---------通讯之SOMEIP

1. 什么是SOME/IP 服务导向架构&#xff08;SOA&#xff0c;Service-Oriented Architecture&#xff09;是一种设计软件系统的方法&#xff0c;强调通过可重用的服务来实现系统的松散耦合。每个服务是独立的功能单元&#xff0c;可以被不同的应用程序使用。这些服务通过标准化的…

新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题

苹果CMS2022新版海螺影视主题M3.1版本&#xff0c;这个主题我挺喜欢的&#xff0c;之前也有朋友给我提供过原版主题&#xff0c;一直想要破解但是后来找了几个SG11解密的大哥都表示解密需要大几百大洋&#xff0c;所以一直被搁置了。这个版本是完全解密的&#xff0c;无需SG11加…

ADG901介绍

目录 一、特性二、增强产品特性三、应用四、一般描述五、极低功耗六、引脚描述七、尺寸参数八、电路连接 一、特性 宽带开关&#xff1a;-3 dB 在 4.5 GHz吸收型开关高关断隔离度&#xff1a;在 1 GHz 时为 38 dB低插入损耗&#xff1a;在 1 GHz 时为 0.8 dB单一 1.65 V 至 2.…

QT5:嵌入式linux开发板调用键盘

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录​​​​​​​ 前言 一、Buildroot构建QT环境 1.1 构建环境 1.2 检查qtvirtualkeyboard库 二、测试过程 2.1 直接调用qtvirtualkeyboard 1.测试代码 2.测试效果 2.2 运行…

【Unity国产化信创平台】麒麟银河V10系统虚拟机创建

目录 一、麒麟V10系统镜像下载 二、虚拟机创建流程 三、麒麟银河系统安装流程 一、麒麟V10系统镜像下载 https://www.kylinos.cn/# 官方访问还是会有问题&#xff0c;如果有需要麒麟银河Kylin系统V10的镜像文件&#xff0c;可以留下邮箱或者私信博主获取。 二、虚拟机创…