@[TOC](考研之数据结构033_算法排序_基数排序(Radix Sort))
考研不考代码
在这里插入图片描述
一、基数排序的思想(递减)
- 基数排序不是基于“比较”的排序算法
- 一般都是基于链式存储,进行操作
1、例子形式:
- 将三位数字拆分为三位(个、十、百)范围为0~9,建立十个队列。
- 第一趟:以“个位”进行分配。个位数依次对应0~9队列。队列是先进先出
- 进行收集:递减的操作,所以要以个位更大的队列进行收集。
- 第二趟:以“十位”进行分配…同上
- 第三趟:以“百位”进行分配…同上
2、定义格式:
表长为n
d元组是:d趟分配和收集。例如一个百位数字123,拆成3元组:个位,十位,百位。
r基数是:例如数字是0~9。所以数字基数就是10。也就是说十个队列。也就是说r个辅助队列。
权重:例如百位》十位》个位。也就是百位对数字影响力最大,其次十位,其次个位。
递减:就是先收集值为更大的,依次从大到小。
递减:就是先收集值为更小的,依次从小到大。
二、复杂度
需要r个辅助队列,那么空间复杂度是 0(r)
三、稳定性:稳定
四、基数排序的应用
在某种情况下,基数排序是大于堆排序和快速排序
1、基数擅长解决的问题:
2.举反例:
- 给5个人的身份证号排序:
d比较大,代表的是元组个数,分组的多少。那么需要拆分为18组,进行18次分配和回收。d - 给中文名,进行排序:
r比较大,r代表的是队列个数比较大。因为汉字太多了,每一个字就要对应一个队列,从而队列太多。 - 数组元素个数n比较大:效率是很好的,比快排和堆排还要好。