基数排序

2023-05-16

基数排序

  • 一、什么是基数排序
  • 二、基数排序的代码实现
  • 三、总结

一、什么是基数排序

基数排序属于非比较类排序——非比较类排序包括计数排序、基数排序、桶排序。
在这里插入图片描述

基数排序是由计数排序改善而来的,基数排序将整数或者字符串切分不同的数字或字符,然后按照低位先排序收集,接着高位排序收集,依次类推直到最高位。

动图演示
在这里插入图片描述

二、基数排序的代码实现

public static void sort(int[] arr){
    int length = arr.length;

    //最大值
    int max = arr[0];
    for(int i = 0;i < length;i++){
        if(arr[i] > max){
            max = arr[i];
        }
    }
    //当前排序位置
    int location = 1;

    //桶列表
    ArrayList<ArrayList<Integer>> bucketList = new ArrayList<>();

    //长度为10 装入余数0-9的数据
    for(int i = 0; i < 10; i++){
        bucketList.add(new ArrayList());
    }

    while(true)
    {
        //判断是否排完
        int dd = (int)Math.pow(10(location - 1));
        if(max < dd){
            break;
        }

        //数据入桶
        for(int i = 0; i < length; i++)
        {
            //计算余数 放入相应的桶
            int number = ((arr[i] / dd) % 10);
            bucketList.get(number).add(arr[i]);
        }

        //写回数组
        int nn = 0;
        for (int i=0;i<10;i++){
            int size = bucketList.get(i).size();
            for(int ii = 0;ii < size;ii ++){
                arr[nn++] = bucketList.get(i).get(ii);
            }
            bucketList.get(i).clear();
        }
        location++;
    }
}

三、总结

基数排序是稳定的算法,算法的时间复杂度为O(d(n+r)),d为位数,r为基数。算法这块考察的最基础的知识就是排序这一块了,实际有十大排序算法,但我认为只要掌握八大排序算法就已经够了。其实在很多时候,程序员对于排序算法应该算是非常熟悉了,有些语言例如c++STL容器也封了排序算法。但这些还不够,对自己的最低要求是要能手写这些算法的实现,清楚每种算法的特性、时间复杂度等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基数排序 的相关文章

  • 三范式分解算法

    三范式是BC范式的放宽 三范式条件 满足一个即可 gt 是平凡的函数依赖 除了子集和父集的函数依赖 大多的函数依赖都是非平凡的 是关系模式R的一个超码 属性集里的所有属性都被包含在 R的candidate key里 注意 的属性集里的所有元
  • 关系数据库设计 函数依赖 逻辑蕴含

    函数依赖 属性集 决定属性集 则称有函数依赖 to 逻辑蕴含 F能推出 原不直观存在于 函数依赖集F 中的函数依赖
  • 斯密特正交化(matlab)

    斯密特正交化 matlab 数学过程 伪代码如下 function b 61 Gram Schmidt Orthogonalization a row col 61 size a b 1 61 a 1 for i in 2 col for
  • autohotkey[启动][发送键击][click][常用窗口命令]

    启动程序或文档 run命令 run exe file in environment path Run Notepad 不在环境变量中的程序或文档 Run A ProgramFiles Winamp Winamp exe open file
  • 通过键盘移动鼠标光标 autohotkey

    通过键盘移动鼠标光标 MouseMove键 参数定义 MouseMove X Y Speed R 鼠标移动的目标位置的 x y 坐标 可以为 表达式 坐标相对于活动窗口Speed 移动鼠标的速度 xff0c 介于 0 xff08 最快 xf
  • 用Tkinter实现一个离线定时语音播报应用程序

    最近单位领导与我提起 xff0c 说要做一个语音播报功能程序 xff0c 意在定时提醒职工进行抄表工作 在下也是个刚毕业不久的小白 xff0c 从头开始学习Python 对于这个程序虽说小 xff0c 但也只是看起来而已 xff0c 在细节
  • 通过用户POI经纬度获取居住地的房价信息

    Arcmap处理数据 1 建立Map和GDB2 加载数据3加载地图4 导出为点数据5 过滤错误数据6 将过滤后的数据保存为新图层7 转换坐标系为38578 IDW插值9 绘制渔网图Fishnet10 Zonal Statistics As
  • 天干地支

    以下是天干地支的称呼 xff1a 天干地支简称 干支 xff0c 十天干 xff1a 甲 xff08 ji xff09 乙 xff08 y xff09 丙 xff08 b ng xff09 丁 xff08 d ng xff09 戊 xff0
  • spring知识总结

    什么是spring spring是一套提供IOC和AOP功能架 xff0c 为简洁开发提供的一套轻量级框架 主要包括一下几个模块 xff1a spring context xff1a 提供框架式的bean访问方式 xff0c 以及企业级任务
  • CentOS7安装MySQL8.0图文教程(有图有真相,亲测可用)

    下载 MySQL 所需要的安装包 网址 xff1a https dev mysql com downloads mysql Select Operating System 选择 Red Hat xff0c CentOS 是基于红帽的 xff
  • GIT之【ERROR: commit count: 1, latest commit: xxxxx. missing Change-Id in message footer】

    项目场景 xff1a 在一次代码提交的时候 xff0c 怎么也无法提交成功 前情提要 该项目启动时 xff0c 报错npm ERR could not determine executable to run xff0c 然后我参考了这篇文章
  • 百度2020校招测试工程师笔试题 石头剪刀布

    Problem Description 西西打算和一头小猪进行N轮剪刀石头布 xff0c 初始时双方的分数都为0 xff0c 对每一轮而言 xff0c 如果不是平局则胜者得1分 xff0c 败者扣1分 小猪告诉西西它会在其中的M轮出石头 x
  • Activity生命周期(onNewIntent)

    两个Activity A中有一个button xff0c 点击打开B A和B的生命周期怎么执行 span class token class name A span span class token punctuation span onP
  • C# Newtonsoft.Json用法

    目录 一 创建JSON对象 二 创建JSON数组 三 使用Linq to JSON查询 四 将类对象序列化为Json 五 将Json反序列化为类对象 六 常用工具 1 判断Json是否正确 2 添加转义字符 3 去转义字符 4 压缩Json
  • ubuntu18.04安装谷歌浏览器

    1 下载安装包 span class token function wget span https dl google com linux direct google chrome stable current amd64 deb 遇到un
  • 在集群上运行Spark应用程序

    启动Spark集群 请登录Linux系统 xff0c 打开一个终端 启动Hadoop集群 cd usr local hadoop sbin start all sh 启动Spark的Master节点和所有slaves节点 cd usr lo
  • Linux Centos安装JDK1.8教程

    第一步 xff1a 先下载JDK1 8 xff0c 可以去官网下载 xff0c 也可以直接用我这里的 xff1a 下载地址 xff1a 链接 xff1a https pan baidu com s 1f1EDWvG GzpQRJaC W4S
  • 2019阿里校招面试【前端】(一)

    2019阿里校招面试一面 xff08 前端 xff09 问题 xff1a 项目里面遇到的困难promise请求失败如何返回原来页面call apply bind数组中找某个元素的方法和时间复杂度前端工程化继承的方式跨域前端安全vuex和re
  • centos 7 查看IP地址不存在

    1 安装了一般centos 7服务版尽然不能访问产看IP地址说明没有存在 错误信息提示 xff1a 2 查看本机是否分配了网关输入命令 ip addr 提示信息 xff1a 3 然后我们进入网卡配置文件的目录 执行命令 cd etc sys
  • python实现图的深度优先遍历(DFS)和广度优先遍历(BFS)算法

    span class token comment 图的深度优先和广度优先遍历 span span class token keyword def span span class token function DFS span span cl

随机推荐