基数排序+推导过程

图解

在这里插入图片描述
在这里插入图片描述

代码实现

package com.atguigu.sort;import java.util.Arrays;/*** @创建人 wdl* @创建时间 2021/3/22* @描述*/
public class RadixSort {public static void main(String[] args) {//53, 3, 542, 748, 14, 214int arr[] = {53, 3, 542, 748, 14, 214};radixSort(arr);}//基数排序方法public static void radixSort(int[] arr) {//根据前面的推导过程,我们可以得到最终的基数排序代码//1.得到数组中最大的数的位数int max = arr[0];//假设第一个数就是最大数for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}//得到最大数是几位数int maxLength = (max + "").length();//定义一个二维数组,表示10个桶,每个桶就是一个一维数组//说明//1.二维数组包含10个一维数组//2.为了防止在放入数的时候,数据溢出,则每个一维数组(桶),大小定为arr.length//3.明确,基数排序是使用空间换时间的经典算法int[][] bucket = new int[10][arr.length];//为了记录每个桶中,实际存放了多少个数据,我们定义一个一维数组类记录各个桶每次放入的数据个数//可以这样理解//bucketElementCounts[0],记录的就是bucket[0]桶的放入数据个数int[] bucketElementCounts = new int[10];//这里我们使用循环将代码处理for (int i = 0,n=1; i < maxLength; i++,n*=10) {//(针对每个元素的对应位进行排序处理),第一次是十位,第二次是百位。。。。for (int j = 0; j < arr.length; j++) {int digitofElement = arr[j]/n % 10;//放入到对应的桶中bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j];bucketElementCounts[digitofElement]++;}//按照这个桶的排序(一维数组的下标依次取出数据,放入原来的数组)int index = 0;//遍历每一个桶,并将桶中的数据放入到原来的数组for (int k = 0; k < bucketElementCounts.length; k++) {//如果桶中,有数据,我们才放入到原数组if (bucketElementCounts[k] != 0) {//循环该桶即K个桶(即第K个一维数组),放入for (int l = 0; l < bucketElementCounts[k]; l++) {//取出元素放入到arrarr[index] = bucket[k][l];index++;}}//第1轮处理后,需要将每个bucketElementCounts[k]=0!!!!bucketElementCounts[k] = 0;}System.out.println("第"+(i+1)+"轮,对个位的排序处理arr=" + Arrays.toString(arr));}//        //第1轮(针对每个元素的个位进行排序处理)
//        for (int j = 0; j < arr.length; j++) {
//            //取出每个元素的个位
//            int digitofElement = arr[j] % 10;
//            //放入到对应的桶中
//            bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j];
//            bucketElementCounts[digitofElement]++;
//        }
//
//        //按照这个桶的排序(一维数组的下标依次取出数据,放入原来的数组)
//        int index = 0;
//        //遍历每一个桶,并将桶中的数据放入到原来的数组
//        for (int k = 0; k < bucketElementCounts.length; k++) {
//            //如果桶中,有数据,我们才放入到原数组
//            if (bucketElementCounts[k] != 0) {
//                //循环该桶即K个桶(即第K个一维数组),放入
//                for (int l = 0; l < bucketElementCounts[k]; l++) {
//                    //取出元素放入到arr
//                    arr[index] = bucket[k][l];
//                    index++;
//                }
//            }
//
//            //第1轮处理后,需要将每个bucketElementCounts[k]=0!!!!
//            bucketElementCounts[k]=0;
//
//        }
//
//        System.out.println("第1轮,对个位的排序处理arr=" + Arrays.toString(arr));//        //第2轮(针对每个元素的十位进行排序处理)
//        for (int j = 0; j < arr.length; j++) {
//            //取出每个元素的十位
//            int digitofElement = arr[j]/10% 10;
//            //放入到对应的桶中
//            bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j];
//            bucketElementCounts[digitofElement]++;
//        }
//
//        //按照这个桶的排序(一维数组的下标依次取出数据,放入原来的数组)
//        index=0;
//        //遍历每一个桶,并将桶中的数据放入到原来的数组
//        for (int k = 0; k < bucketElementCounts.length; k++) {
//            //如果桶中,有数据,我们才放入到原数组
//            if (bucketElementCounts[k] != 0) {
//                //循环该桶即K个桶(即第K个一维数组),放入
//                for (int l = 0; l < bucketElementCounts[k]; l++) {
//                    //取出元素放入到arr
//                    arr[index] = bucket[k][l];
//                    index++;
//                }
//            }
//            //第2轮处理后,需要将每个bucketElementCounts[k]=0!!!!
//            bucketElementCounts[k]=0;
//        }
//
//        System.out.println("第2轮,对十位的排序处理arr=" + Arrays.toString(arr));
//
//
//        //第3轮(针对每个元素的百位进行排序处理)
//        for (int j = 0; j < arr.length; j++) {
//            //取出每个元素的百位
//            int digitofElement = arr[j]/10 /10% 10;
//            //放入到对应的桶中
//            bucket[digitofElement][bucketElementCounts[digitofElement]] = arr[j];
//            bucketElementCounts[digitofElement]++;
//        }
//
//        //按照这个桶的排序(一维数组的下标依次取出数据,放入原来的数组)
//        index=0;
//        //遍历每一个桶,并将桶中的数据放入到原来的数组
//        for (int k = 0; k < bucketElementCounts.length; k++) {
//            //如果桶中,有数据,我们才放入到原数组
//            if (bucketElementCounts[k] != 0) {
//                //循环该桶即K个桶(即第K个一维数组),放入
//                for (int l = 0; l < bucketElementCounts[k]; l++) {
//                    //取出元素放入到arr
//                    arr[index] = bucket[k][l];
//                    index++;
//                }
//            }
//            //第3轮处理后,需要将每个bucketElementCounts[k]=0!!!!
//            bucketElementCounts[k]=0;
//        }
//
//        System.out.println("第3轮,对百位的排序处理arr=" + Arrays.toString(arr));}}

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

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

相关文章

Xamarin的坑 - 绑定(一) - 拿微信iOS SDK 简单说起

编者语&#xff1a;Xamarin 并入微软快一年了&#xff0c;在国内推广还是慢&#xff0c;主要有两个方面&#xff0c;Xamarin在国内的本地化不足真正在国内的解决方案基本上没有&#xff0c;第二就是和本土的一些主要SDK接入案例基本上也没有。上述原因令不少企业放弃使用这个很…

JS刷新页面的几种方法

转载自 JS刷新页面的几种方法 Javascript刷新页面的几种方法&#xff1a; 1 history.go(0) 2 location.reload() 3 locationlocation 4 location.assign(location) 5 document.execCommand(‘Refresh‘) 6 window.navigate(location) 7 location.replace(location) …

16岁应该遵循什么_成人学习一般遵循的规律

成人学习一般遵循的规律第一阶段是激发起对过去的经历的回忆&#xff0c;让学习者回头想想自己以前做了些什么&#xff0c;是在什么情况下运用什么方法做的&#xff1b;第二阶段&#xff0c;启发学习者对这些经历进行反思&#xff0c;检讨这些经历的成功与失败之所在&#xff0…

stream进行分组统计

// //groupingBy分组 // Map<Integer, Long> map houseList.stream().collect(Collectors.groupingBy(House::getBuildId, Collectors.counting())); // //控制台输出map // map.forEach((k,v)->{ // System.out.println("k"k",v"v)…

js实现页面跳转重定向的几种方式

转载自 js实现页面跳转重定向的几种方式 这篇文章主要介绍js实现页面跳转重定向的几种方式,需要的朋友可以参考下 第一种&#xff1a; <script language"javascript"type"text/javascript"> window.location.href"http://shanghepinpai.c…

二分查找+思路分析

思路分析 代码实现 package com.atguigu.search;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int arr[]{1,8,10,89,1000,1234};int…

SQLServer On Linux Package List on CentOS

问题引出 “鸟儿啊&#xff0c;到底SQLServer on Linux肚里装了多少东西&#xff0c;在我们的CentOS系统安装了哪些物理文件呢&#xff1f;”&#xff0c;老鸟这天火急火燎的问道。“这个啊&#xff1f;让本鸟帮你一探究竟。”&#xff0c;菜鸟耐心回答道。 问题分析 菜鸟一边想…

开发环境 Minio 添加桶的操作流程-页面操作

命令操作 d开发环境 Minio 添加桶的操作流程_摇曳的精灵的博客-CSDN博客_minio创建桶 页面操作

python 可视化数据库_python实现地址分布可视化

当你知道某些详细地址信息&#xff0c;该如何利用。本文通过调用百度地图接口&#xff0c;实现用户可视化展示&#xff0c;便于更清楚地了解用户。注册百度地图开放平台帐号Python调用通过http调用接口格式如下&#xff1a;全选复制放进笔记http://api.map.baidu.com/geocoder/…

冬至快乐

男生关注会更帅&#xff0c;女生关注会更美&#xff01;冬至冬至到&#xff0c;吃水饺&#xff0c;颗颗都有年味道。头常挠&#xff0c;口常笑&#xff0c;睿智快乐常围绕。摇摇头&#xff0c;晃晃脑&#xff0c;轻松健康直到腰。扭扭臂&#xff0c;捏捏脚&#xff0c;健康到底…

JavaScript原生添加移除class的方法

转载自 JavaScript原生添加移除class的方法 1.JavaScript原生移除class方法 window.onload function () {var stamp document.getElementById("btGetCode"); //根据id查找到该标签removeClass(stamp, "can-code"); //调…

二分查找(一次查找多个相同的值)

package com.atguigu.search;import java.util.ArrayList; import java.util.List;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int…

介绍Portable PDB

为了调试编译的应用程序&#xff0c;有必要将IL代码或二进制的机器代码与源代码行进行匹配。虽然数据可以嵌入在应用程序中&#xff0c;但这会显著增加EXE或DLL文件的大小。取而代之的是&#xff0c;通常会使用单独的“symbols”文件。在Windows平台上&#xff0c;这被称为PDB或…

RedisGeo实现增删改查 java计算指定坐标最近的距离并排序

利用Redis的Geo功能实现查找附近的位 - 云社区 - 腾讯云 package com.easy.hotel.pms.util;import com.easy.hotel.common.data.tenant.TenantContextHolder; import com.easy.hotel.pms.mapper.CommunityMapper; import com.easy.hotel.pms.service.impl.CommunityServiceImpl…

openglshader实现虚拟场景_opengl+shader

1、环境介绍&#xff1a;】软件 &#xff1a;visual studio编程语言&#xff1a;opengl库 &#xff1a;glad glfw【2、内容介绍】-- 绘制场景&#xff1a;场景1&#xff1a; 一片沙漠中&#xff0c;一本书&#xff0c;四周出现 5 个自球&#xff0c;逐渐被黑雾笼罩场景2&#x…

没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))

今天在开发指纹识别的项目时候&#xff0c;出现了个问题&#xff0c;这个问题之前也没有见过&#xff0c;所以无从下手&#xff0c;只能从网上找解决方法&#xff0c;找了半天说要注册com组件啥的&#xff0c;我老是注册不成功&#xff0c;后来瞎捣鼓终于解决了&#xff0c;原因…

JS获取自定义属性data-*值与dataset

转载自 JS获取自定义属性data值 <body> <div id"tree" data-leaves"47" data-plant-height"2.4m"></div> <script> var tree document.getElementById("tree"); //getAttribute()取值属性 console.log(tr…

插值查找+代码实现+注意事项

图解 代码实现 package com.atguigu.search;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ public class InsertValueSearch {public static void main(String[] args) {int[] arrnew int[100];for (int i 0; i < 100; i) {arr[i]i1;}// S…

SQL Server on Linux的文件和目录结构

问题引入 “鸟儿啊&#xff0c;我记得你写过一篇《SQLServer On Linux Package List on CentOS》的文章&#xff0c;从这篇文章&#xff0c;我们很清楚的知道了SQL Server on Linux包含有哪些必要的包。那么&#xff0c;我们怎么知道SQL Server on Linux到底包含哪些重要的文件…