24-数据结构-内部排序-基数排序

基数排序

基数排序,给关键字分成d位(组),,对每一位的情况,可能会出现的值位r(基数)个,然后分成r个队列,对每个对林进行分配耗时O(n),最后按照改位(组)情况,进行收集耗时O(r)

所以基数排序的

时间复杂度:O(d*(r+n))。

空间复杂度:O(r),创建r个队列。-口令:饿(额外空间)鬼(归并排序),炸鸡(基数排序)块

稳定性:稳定,一直按照关键字,有序排列的,相同关键字入队,相对位置不会变

适用情况:

1.每组关键字方便拆成d位(组),且d比较小。

2.每组关键字取值不大,r较小。

3.元素个数较大时,d比较大。

2.思路:

有点乱,简单来说,以整数为例子,有一个线性表,每个结点存储的数据都为三位数(关键字)。

  1. 三位数按照位数分为:个位、十位、百位(d=3),
  2. 先进行个位的情况,个位可能出现的数字为0-9,十个数字,因此r=10.
  3. 准备10个队列,每一个队列存储一个数字出现的可能性。按照个位,进行入队。这为分配
  4. 如果要求递减序列,则给个位按照递减,依次给队列从大队列到小队列,链接起来,最后收集成一个新的线性表,这叫收集
  5. 随后再根据十位的情况,重复类似的操作,最后进行完即可,
  6. 如图:

分配:

收集:

相关推荐
祖力5511 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表
白狐_79814 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25814 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
船厂电气自动化ai大模型16 小时前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光16 小时前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
不会就选b20 小时前
算法日常・每日刷题--<优先级队列>2
数据结构·算法
LuminousCPP21 小时前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
ChaoZiLL21 小时前
二叉树经典例题
数据结构·算法
三克的油21 小时前
算法基础-1
数据结构·c++·算法
一米阳光86611 天前
软考(中级)软件设计师核心笔记(8)数据结构——树与二叉树
数据结构·笔记·职场发展·软考·软件设计师·中级职称