数据结构与算法之基数算法

基数算法的思路是数组中的元素无论是几位数,但是每一位都不可能超过0-9的范围,所以通过循环判断每一位属于0-9的哪一个.将其放入对应的栈中,一次循环下来,确定了个位数的排序.如果是两个元素在同一个栈中那取出的顺序是先进先出.第二次循环确定十位的位置

第三次是百位以此类推.这里需要注意的是最大的循环次数应该是数组中最大元素的位数,所以如果发现位数不相同需要补0

    public static void jishu(int[] arr) {
        //将数组转换成字符串数组,并找到最长的数
        String[] sarr = new String[arr.length];
        int max = 1;
        for (int i = 0; i < arr.length; i++) {
            String s = String.valueOf(arr[i]);
            sarr[i] = s;
            if (s.length() > max) {
                max = s.length();
            }
        }

        for (int i = 0; i < sarr.length; i++) {
            int c = max - sarr[i].length();
            for (int x = 0; x < c; x++) {
                sarr[i] = "0" + sarr[i];
            }
        }

        Queue queue0 = new ArrayDeque<>();
        Queue queue1 = new ArrayDeque<>();
        Queue queue2 = new ArrayDeque<>();
        Queue queue3 = new ArrayDeque<>();
        Queue queue4 = new ArrayDeque<>();
        Queue queue5 = new ArrayDeque<>();
        Queue queue6 = new ArrayDeque<>();
        Queue queue7 = new ArrayDeque<>();
        Queue queue8 = new ArrayDeque<>();
        Queue queue9 = new ArrayDeque<>();

        for (int i = max - 1; i >= 0; i--) {
            for (int x = 0; x < sarr.length; x++) {
                String s = sarr[x].charAt(i) + "";
                switch (s) {
                    case "0":
                        queue0.add(sarr[x]);
                        break;
                    case "1":
                        queue1.add(sarr[x]);
                        break;
                    case "2":
                        queue2.add(sarr[x]);
                        break;
                    case "3":
                        queue3.add(sarr[x]);
                        break;
                    case "4":
                        queue4.add(sarr[x]);
                        break;
                    case "5":
                        queue5.add(sarr[x]);
                        break;
                    case "6":
                        queue6.add(sarr[x]);
                        break;
                    case "7":
                        queue7.add(sarr[x]);
                        break;
                    case "8":
                        queue8.add(sarr[x]);
                        break;
                    case "9":
                        queue9.add(sarr[x]);
                        break;
                }
            }
            int index = 0;
            while (!queue0.isEmpty()) {
                sarr[index] = queue0.poll();
                index++;
            }
            while (!queue1.isEmpty()) {
                sarr[index] = queue1.poll();
                index++;
            }
            while (!queue2.isEmpty()) {
                sarr[index] = queue2.poll();
                index++;
            }
            while (!queue3.isEmpty()) {
                sarr[index] = queue3.poll();
                index++;
            }
            while (!queue4.isEmpty()) {
                sarr[index] = queue4.poll();
                index++;
            }
            while (!queue5.isEmpty()) {
                sarr[index] = queue5.poll();
                index++;
            }
            while (!queue6.isEmpty()) {
                sarr[index] = queue6.poll();
                index++;
            }
            while (!queue7.isEmpty()) {
                sarr[index] = queue7.poll();
                index++;
            }
            while (!queue8.isEmpty()) {
                sarr[index] = queue8.poll();
                index++;
            }
            while (!queue9.isEmpty()) {
                sarr[index] = queue9.poll();
                index++;
            }
        }

        for (int i = 0; i < sarr.length; i++) {
            arr[i] = Integer.valueOf(sarr[i]);
        }
    }

以下是一个测试方法

Original: https://www.cnblogs.com/zumengjie/p/16183966.html
Author: 顶风少年
Title: 数据结构与算法之基数算法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/588893/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Nginx如何解决跨域问题?

    前言 H5的开发中一定离不开的一个问题就是跨域,当协议、端口、域名其中一项不同时就会跨域,解决跨域的方法也有很多,开发中常用的例如node转发、CORS、还有就是Nginx配置转发…

    Java 2023年5月30日
    074
  • Java学习-086-Springboot 自定义启动 banner 信息

    Springboot 启动时会加载默认的 banner 信息,并在控制台输出。因而可以通过自定义 banner 文件内容实现启动 banner 的自定义。 在项目的 resouce…

    Java 2023年5月29日
    088
  • java学习摘抄笔记mybaits1

    mybatis 第一天mybatis 的基础知识 课程安排: mybatis 和springmvc 通过订单商品 案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc 程…

    Java 2023年5月29日
    076
  • mysql sql语法

    show index from 表名; 查询某一张表的索引 explain select * from 表名 where 条件; 使用explain查看查询优化器对索引的使用情况 …

    Java 2023年6月5日
    087
  • 访问修饰符你用对了吗

    不知道大家在平时的开发过程中有没有注意到访问修饰符,哈哈哈,有没有懵,在java中有哪些访问修饰符,还记得清吗?今天想分享下访问修饰符的哪些小事。 一、访问修饰符有哪些 在java…

    Java 2023年6月9日
    063
  • javascript基本属性访问对象的属性和方法

    var myName = “Shelley”; //字符串基本类型 alert(myName.length); //隐式创建String对象,数值与myNa…

    Java 2023年6月6日
    070
  • MySQL递归查询语法

    业务上有一个递归查询数据表进行累加计算的需求,实现方式上有函数、SQL语句等多种方式,最后选择了SQL方式,如下: <select id="selectChildr…

    Java 2023年6月13日
    071
  • SpringBoot接口-如何生成接口文档之Swagger技术栈?

    SpringBoot开发Restful接口,有什么API规范吗?如何快速生成API文档呢?Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来…

    Java 2023年6月6日
    085
  • spring的RestTemplate连接池相关配置

    转发:https://blog.csdn.net/weixin_33724659/article/details/93338398?utm_medium=distribute.pc…

    Java 2023年5月30日
    079
  • Linux源码安装RabbitMQ高可用集群

    1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_serv…

    Java 2023年6月7日
    079
  • 删除链表的倒数第k个结点

    删除链表的倒数第k个结点 问题重述: 给你一个链表,删除链表的倒数第 k 个结点,并且返回链表的头结点。 示例 1: &#x8F93;&#x5165;&#x…

    Java 2023年6月7日
    0114
  • 就这么一个简单的校验,80%的程序员却做不到,更不理解!

    在学生管理系统里,其中会有学生信息采集的功能。程序结构不外乎下面的分层实现方式。 开发出来这个功能,我觉得大家都易如反掌了。 当然易如反掌。 OK,我要说的是数据校验,以最简单的非…

    Java 2023年6月15日
    081
  • 【Java基础】Java注解简单入门

    注解简单来说就是配置,是特别的配置,之前常用的配置文件,可以用注解替换。然后通过反射去获取注解的信息。 如何定义一个注解 你在IDE中新建一个注解定义,是这样的结构的: packa…

    Java 2023年5月29日
    0111
  • HttpClient的 java.net.SocketException: Too many open files

    今天在维护一个老项目的时候发现,错误: 大致意思是,资源未释放。 代码用的是httpClient,在finally中也关比了资源 后来找度娘了解下: 所以,我的:postMetho…

    Java 2023年5月29日
    0174
  • qemu aarch64虚拟机创建好后,使用NAT连接网络

    宿主机上创建文件 /etc/qemu-ifup,内容如下 #!/bin/sh # Copyright IBM, Corp. 2010 # Authors: Anthony Ligu…

    Java 2023年5月30日
    059
  • C语言输出九九乘法表

    C语言学了有一阵子了,趁着假期没事练练手,没想到挺简单 基本思路是这样的 先写一个主函数,然后定义两个变量i1和i2;使用for语句循环嵌套,外层循环负责写循环9次,内循环里面写从…

    Java 2023年6月9日
    0120
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球