基数排序+速度测试

package com.atguigu.sort;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;/*** @创建人 wdl* @创建时间 2021/3/22* @描述*/
public class RadixSort {public static void main(String[] args) {//53, 3, 542, 748, 14, 214
//        int arr[] = {53, 3, 542, 748, 14, 214};//创建一个80000个的随机数组int[] arr = new int[80000];for (int i = 0; i < 80000; i++) {arr[i]=(int)(Math.random()*8000000);//生成一个[0,8000000)数}Date data1 = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");String data1str = simpleDateFormat.format(data1);System.out.println("排序前的时间是="+data1str);radixSort(arr);Date data2 = new Date();String data2str = simpleDateFormat.format(data2);System.out.println("排序后的时间是="+data2str);}//基数排序方法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/326748.shtml

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

相关文章

ssh(Spring+Spring mvc+hibernate)——DeptServiceImpl.java

/** * Title: DeptServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:08:50 * version V1.0 */ package org.service.impl;import java.io.Serializable; imp…

JavaScript学习总结(九)——Javascript面向(基于)对象编程

转载自 JavaScript学习总结(九)——Javascript面向(基于)对象编程 一、澄清概念 1.JS中"基于对象面向对象" 2.JS中没有类(Class)&#xff0c;但是它取了一个新的名字叫“原型对象”&#xff0c;因此"类原型对象" 二、类(原型对象)和对象(实例)的区别与联…

杭州驾照驾驶证更换

1.去杭州市和睦医院体检 体检费15元 做个测试眼睛度数的 2.去杭州车管所 换证 排队大约20分钟 要带一张白底照片 也可以现场有自助拍照的 弄好之后大约再等 20分钟 可以拿到证件 其他 可以去xx邮政的 不过不是现场拿证 要过7个工作日 会邮寄过来

ssh(Spring+Spring mvc+hibernate)——EmpServiceImpl.java

/** * Title: EmpServiceImpl.java * Package org.service.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午10:19:41 * version V1.0 */ package org.service.impl;import java.io.Serializable; impo…

将Springboot项目放在服务器上一直运行

nohup java -jar hz-sms-0.0.1-SNAPSHOT.jar >/www/wwwroot/...-0.0.1-SNAPSHOT.out 2>&1 &

迁移数据库到SQL on Linux Docker

问题引入 前一篇文章&#xff0c;菜鸟找到了SQL on Linux Docker容器销毁后&#xff0c;容器中的数据库文件可以得以保留的方法&#xff0c;老鸟非常开心。所以&#xff0c;今天又提出了新的问题&#xff1a;“鸟儿&#xff0c;如果我想把我的数据库从SQL on Windows迁移到SQL …

Spring IoC 容器

转载自 Spring IoC 容器 IoC 容器 Spring 容器是 Spring 框架的核心。容器将创建对象&#xff0c;把它们连接在一起&#xff0c;配置它们&#xff0c;并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入&#xff08;DI&#xff09;来管理组成一个应用程序的组…

keyshot卡住了还能保存吗_相机希望你知道的13件事 keyshot相机切换事件

一次我去我学校的球场看足球比赛&#xff0c;遇见一对父母&#xff0c;他们在为自己的孩子拍摄&#xff0c;全程用自动挡&#xff0c;还对着几百米远奔跑的儿童开闪光灯!老实说作为一名严肃的摄影爱好者我有深深的强迫症&#xff0c;于是忍不住就上去跟他们聊开手把手教拍摄技巧…

mybatis-plus le ge 记录

mybatis-plus le ge 记录_LazyTing的博客-CSDN博客 出异常源代码 this.baseMapper.selectList(new QueryWrapper<PersonnelRoleDO>().lambda().eq(PersonnelRoleDO::getTenantId, tenantId).eq(PersonnelRoleDO::getPersonnelCode, personnelCode).ge(PersonnelRoleDO::g…

ssh(Spring+Spring mvc+hibernate)——applicationContext.xml

<?xml version"1.0" encoding"UTF-8"?> <beansxmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"xm…

Spring Beans 自动装配

转载自 Spring Beans 自动装配 Beans 自动装配 你已经学会如何使用<bean>元素来声明 bean 和通过使用 XML 配置文件中的<constructor-arg>和<property>元素来注入 。 Spring 容器可以在不使用<constructor-arg>和<property> 元素的情况下自动…

字段缺失_区分Protobuf 3中缺失值和默认值

来自公众号&#xff1a;新世界杂货铺这两天翻了翻以前的项目&#xff0c;发现不同项目中关于Protobuf 3缺失值和默认值的区分居然有好几种实现。今天笔者冷饭新炒&#xff0c;结合项目中的实现以及切身经验共总结出如下六种方案。增加标识字段众所周知&#xff0c;在Go中数字类…

当初怎么就入了VS的坑

使用Turbo C和Turbo Pascal开始学习编程貌似也是一代人的集体记忆。这方面我也没什么忌讳&#xff0c;毕竟Borland Turbo C在九十年代末的PC上面还是一个运行效率不错的开发工具。然而启蒙老师的水平限制&#xff0c;那个时候所学习的编写和调试技术都不过关&#xff0c;一个超…

ssh(Spring+Spring mvc+hibernate)——hibernate.cfg.xml

<?xml version1.0 encodingUTF-8?> <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse H…

生成赫夫曼编码表

package com.atguigu.huffmancode;import com.sun.org.glassfish.external.statistics.CountStatistic; import com.sun.org.glassfish.external.statistics.StringStatistic;import java.util.*;/*** 创建人 wdl* 创建时间 2021/3/27* 描述*/ public class HuffmanCode {publi…

Mysql截取字段中 用逗号分割 省市县镇街道社区小区

Mysql截取字段中 用逗号分割 省市县镇街道社区小区 select id , name, substring_index(name,,,0) as province0, substring_index(name,,,1) as province1, substring_index(name,,,2) as province2, substring_index(name,,,3) as province3, substring_index(name,,,4) as…

如何导出Navicat的数据库连接配置

如何导出Navicat的数据库连接配置 如何导出Navicat的数据库连接配置_石头wang的博客-CSDN博客_navicat 导出配置 如何导出Navicat的数据库连接配置 背景 我们可能会在不同的电脑安装Navicat&#xff0c;这些连接的配置如何从一台电脑迁移到另外一条&#xff1f;自行备份是比较…

Spring BeanFactory 容器

转载自 Spring BeanFactory 容器 Sping 的 BeanFactory 容器 这是一个最简单的容器&#xff0c;它主要的功能是为依赖注入 &#xff08;DI&#xff09; 提供支持&#xff0c;这个容器接口在 org.springframework.beans.factory.BeanFactory 中被定义。 BeanFactory 和相关的…

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情&#xff0c;希望对C#开发人员有所帮助。 1. 开发过程 开发过程是错误和缺陷开始的地方。使用工具可以帮助你在发布之后&#xff0c;解决掉一些问题。 编码标准 遵照编码标准可以编写出更多可维护的代码&#xff0c;特别是在由多个开发…

充电提示音_iPhone如何自定义充电提示音,图文教程

昨天给小伙伴们分享了几个iOS14的充电提示音和设置方法&#xff0c;不过有的小伙伴可能需要设置自己喜欢的声音为充电提示音&#xff0c;所以今天就来教大家自定义喜欢的iOS14充电提示音。教程由于比较仔细&#xff0c;看起来比较长&#xff0c;其实很简单&#xff0c;主要分为…