IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 排序算法专栏:基数排序 -> 正文阅读

[人工智能]排序算法专栏:基数排序

摘要

基数排序是把待排序数组按照位上的数值进行分类,我们知道阿拉伯数字由 0-9 组成,可以按照不同位进行分类,因为 0-9 是有序的,所以最后每一位都分类之后再按照 0-9 的顺序拾起来,就是一个有序数组了(我们这里只讨论大于等于 0 的整数数组,基数排序其实不是只能使用于整数)。

图示

图片来源:菜鸟教程

从图中可以看到,数组中最大数的位数,就是需要分类的次数。原理是每次分类都是把这位上值相同的数字集中在一起,然后通过比当前位高一位的值大小来确定顺序(因为高一位也会进行一次分类)。

实现:

def radix_sort(data):
    """data必须是不为空的数组,且数组内是数字,数字大于等于0"""

    # 待排序数组中最大数的位数,比如 1024 则 max_bit_count = 4
    max_bit_count = len(str(max(data)))

    for i in range(max_bit_count):   # 循环位数次

        # 基数队列 对应 图示中下方的 0 - 9
        radix_queue = [list() for _ in range(10)]

        for d in data:
            str_num = str(d)  # 把数字转换成字符串
            if len(str_num) > i:  # 这两行是用来取当前位的数值
                radix = int(str_num[len(str_num)-i-1])
            else:
                radix = 0  # 位数不够了,分到 0 类
            radix_queue[radix].append(d)  # 归到对应类
            
        position = 0  # 待排序位置索引
        for queue in radix_queue:
            for val in queue:
                data[position] = val
                position += 1
                
    return data

在实际项目中,如果对效率有所要求,而不太关心空间的使用时,可以选择用基数排序,或者是基数排序的变种。

性能:

假设最大数是 99884,那么一定会循环 5 次O(n),只考虑自然数的情况,基数只有 0-9 为 10 个。通过代码分析可以看到没有提前结束的情况,所以该算法的最好、最坏、平均时间复杂度均为

O(5*(n+10))

令 d 为最大数字的位数,r 为基数个数,那么时间复杂度是:

O(d*(n+r))

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-07-30 22:43:54  更:2021-07-30 22:44:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 10:47:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码