八大排序--06基数排序(桶排序)

news2024/10/8 21:05:28

【本质--先排序个位,再排序十位,排百位...依次类推的过程】

获取待排序数组中的最高位数

//取计算最大值的位数
		int max=arr[0];
		for(int j=0;j<arr.length;j++) {
			if(arr[j]>max) {
				max=arr[j];
			}
		}

存储数据(桶排序中除了游标遍历外,必要时开辟虚拟空间): 

for(int m=0;m<maxLen;m++) {
			for(int i=0;i<arr.length;i++) {
				int element=arr[i]/n%10; 
				
				int count=elementCounts[element];
				//数据放入
				bucket[element][count]=arr[i];
				//桶纪录+1
				elementCounts[element]++;
			}

取出数据:

 

for(int k=0;k<elementCounts.length;k++) {
					if(elementCounts[k]!=0) {
						for(int l=0;l<elementCounts[k];l++) {
							arr[index]=bucket[k][l];
							index++;
						}
					}
					//清空桶纪录
					elementCounts[k]=0;
				}

完整代码:

package Java.start;

import java.util.Arrays;

public class RadixSort {
//基数排序(桶排序)
	public static void main(String[] args) {
		int[] arr= {55,33,12,21,102,301,44,63,73,87,98};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}
	
	
	
	public static void sort(int[] arr) {
		//取计算最大值的位数
		int max=arr[0];
		for(int j=0;j<arr.length;j++) {
			if(arr[j]>max) {
				max=arr[j];
			}
		}
		int maxLen=(max+"").length();
		
		
		//定义桶
		int[][] bucket =new int[10][arr.length];
		
		//定义桶记录工具
		int[] elementCounts=new int[10];
		
		//遍历maxLen遍
		int n=1;
		for(int m=0;m<maxLen;m++) {
			//取个位
			for(int i=0;i<arr.length;i++) {
				int element=arr[i]/n%10; //对10取余
				//element代表个位数值,也代表放到哪个桶
				
				//读取桶记录中的数值
				int count=elementCounts[element];
				//数据放入
				bucket[element][count]=arr[i];
				//桶纪录+1
				elementCounts[element]++;
			}
				//将数据从桶中取出
				int index=0; //定义index游标,遍历待排序数组
				for(int k=0;k<elementCounts.length;k++) {
					if(elementCounts[k]!=0) {
						for(int l=0;l<elementCounts[k];l++) {
							arr[index]=bucket[k][l];
							index++;
						}
						
					}
					//清空桶纪录
					elementCounts[k]=0;
				}
				
			n=n*10;
		
		}	
			
		
	}
}

结果:

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

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

相关文章

【数据结构 | PTA】栈

文章目录 7-1 汉诺塔的非递归实现7-2 出栈序列的合法性**7-3 简单计算器**7-4 盲盒包装流水线 7-1 汉诺塔的非递归实现 借助堆栈以非递归&#xff08;循环&#xff09;方式求解汉诺塔的问题&#xff08;n, a, b, c&#xff09;&#xff0c;即将N个盘子从起始柱&#xff08;标记…

分析和解决js运算精度问题,出现多位小数

加减乘除都会出现小数精度错误的问题 (见图) 原因&#xff1a;js进行运算时会将数字先转为二进制再进行运算。 错误思路&#xff1a;之前在做数字运算时都是将数字转化为整数再进行运算&#xff0c;某次突然发现在变整数的时候也会出现精度问题&#xff0c;比如上图中的数据。…

LINUX——内核移植、内核编译教程

Linux内核编译是一个将内核源代码转换成可在特定硬件架构上运行的二进制文件的过程。以下是编译Linux内核的一般步骤&#xff1a; 1、准备工作&#xff1a; 确保安装了必要的编译工具&#xff0c;如gcc、make、ncurses库&#xff08;用于make menuconfig&#xff09;等。 2、…

【读书笔记-《30天自制操作系统》-26】Day27

本篇内容不多&#xff0c;主要是一些优化的工作。首先优化了应用程序&#xff0c;然后引入对应用程序的保护功能&#xff0c;最后引入库的概念。 1. 应用程序优化 首先来解决上一篇中遗留的一个bug:使用ncst命令运行的应用程序&#xff0c;按下ShiftF1或者点击x按钮都无法关…

Hierarchical Cross-Modal Agent for Robotics Vision-and-Language Navigation

题目&#xff1a;用于视觉语言导航的层次化跨模态智能体 摘要 1. 问题背景和现有方法 VLN任务&#xff1a;这是一种复杂的任务&#xff0c;要求智能体基于视觉输入和自然语言指令进行导航。 现有方法的局限性&#xff1a;之前的工作大多将这个问题表示为离散的导航图&#x…

『网络游戏』登陆启动框架【05】

将上一章的加载界面隐藏 1.游戏启动逻辑 创建脚本GameRoot.cs &#xff08;该脚本为游戏入口&#xff0c;作用初始化游戏&#xff09; 创建脚本&#xff1a;ResSvc.cs &#xff08;&#xff09; 创建脚本&#xff1a;LoginSys.cs &#xff08;&#xff09; 编写脚本&a…

解析Vue源码中是如何进行模版编译的

模版编译 联系前文&#xff0c;讲了虚拟DOM的patch过程&#xff0c;而虚拟DOM的前提是先有VNode&#xff0c;那么VNode又是从哪里来的&#xff1f;接下来讲的模版编译便是&#xff1a;把用户写的模版进行编译&#xff0c;就会产生VNode。 在日常开发中&#xff0c;我们把写在…

Qt-目录和文件

1. 目录和文件 1.1 目录操作 QDir 类用来处理目录 常用方法&#xff1a; QDir(QString path) &#xff1a; 实例化 absolutePath() : 获取目录绝对路径 dirName() : 获取目录相对路径 exists(dirPath) : 判断目录是否存在 mkdir(QString dirPath) : 创建目录 rmdir(QStr…

经典5级流水线概述

抽象化的流水线结构&#xff1a; 流水线的基本概念 多个任务重叠&#xff08;并发/并行&#xff09;执行&#xff0c;但使用不同的资源流水线技术提高整个系统的吞吐率&#xff0c;不能缩短单个任务的执行时间其潜在的加速比&#xff1d;流水线的级数 流水线正常工作的基本条件…

使用YOLO11实例分割模型进行人物分割【附完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

开放式蓝牙耳机哪个品牌好用?五大口碑最好开放式耳机力荐!

长时间佩戴传统入耳式耳机有时可能会影响耳道健康&#xff0c;鉴于此&#xff0c;转而选择不入耳设计的开放式耳机就成了不少人的新倾向&#xff0c;它们有助于减少细菌滋生和耳道闷热的烦恼。为了帮助大家找到合适的选项&#xff0c;下面我将列举一些市面上口碑不错的开放式耳…

跨境电商怎么搭建网络环境?

跨境电商搭建网络环境是一项复杂但至关重要的任务&#xff0c;它涉及到多个层面的技术和服务。以下是构建高效、安全、可扩展的跨境电商网络环境的一些建议&#xff1a; 1. 选择合适的云服务提供商 可靠性与稳定性&#xff1a;选择知名且有良好口碑的云服务提供商&#xff0c;确…

MySql复习知识及扩展内容

DDL操作库和表 -- todo ------------操作库---------------------------------- -- 创建库 create database if not exists day10 charset utf8; create database if not exists day11 char set gbk; -- 使用库 use day10; -- 查询库 show databases ; -- 删除库 drop databas…

mybatisplus整合springboot3出错(springboot多模块开发)

1.mybatisplus版本太低或者maven导入没用如下的 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version></dependency>2.maven导入冲突了&#xf…

千万不要再用varchar类型来存ip地址了!

对于一个ip地址&#xff0c;比如“192.168.0.110”&#xff0c;由于存在“.”号&#xff0c;所以大部分人都会用varchar类型的字段来进行存储&#xff0c;但是大家有没有想过&#xff0c;对于这样一个字符串&#xff0c;每个字符占用一个字节&#xff0c;那么就需要占用13个字节…

使用ChatGPT高级学术应用SciSpace的技术快速精准的搜索文献论文

在学术研究领域,文献综述是非常重要的一个部分。它不仅是对已有研究的梳理和总结,更是对新研究方向的探索和定位。面对浩瀚的学术文献海洋,传统的检索方法往往显得力不从心,既耗时又低效。 随着ChatGPT技术的突破,我们终于可以摆脱这一束缚,迎来一种全新的、高效的文献检…

程序员 -买房历险记

快生日了&#xff0c;自己又又 涨了一岁 买房 真不是 一件简单的事。 一. 买房 三大核心问题 1.一手/二手 房 2.哪个城市买 3.哪个地方买 我调研的是 三四线城市&#xff08;俺的老家&#xff09; 二. 买房需要 花多少&#xff08;看得到/看不到&#xff09; 比如 4000元…

SEO(搜索引擎优化)指南

SEO&#xff08;Search Engine Optimization&#xff09;是通过优化网站内容、结构和外部链接&#xff0c;提升网页在搜索引擎结果中的排名&#xff0c;从而增加网站流量的过程。SEO 涉及多个层面&#xff0c;包括技术 SEO、内容优化、外部链接建设等。以下是 SEO 的核心优化策…

HTML图形

HTML图形 1. HTML5 Canvas2.HTML5 内联 SVG3.HTML 5 Canvas vs. SVG 1. HTML5 Canvas HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。画布是一个矩形区域&#xff0c;您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。 1、创建…

『网络游戏』窗口基类【06】

创建脚本&#xff1a;WindowRoot.cs 编写脚本&#xff1a; 修改脚本&#xff1a;LoginWnd.cs 修改脚本&#xff1a;LoadingWnd.cs 修改脚本&#xff1a;ResSvc.cs 修改脚本&#xff1a;LoginSys.cs 运行项目 - 功能不变 本章结束