考研之数据结构033_算法排序_基数排序(Radix Sort)

@[TOC](考研之数据结构033_算法排序_基数排序(Radix Sort))
考研不考代码

在这里插入图片描述

一、基数排序的思想(递减)

  1. 基数排序不是基于“比较”的排序算法
  2. 一般都是基于链式存储,进行操作

1、例子形式:

  • 将三位数字拆分为三位(个、十、百)范围为0~9,建立十个队列。
  • 第一趟:以“个位”进行分配。个位数依次对应0~9队列。队列是先进先出
  • 进行收集:递减的操作,所以要以个位更大的队列进行收集。
  • 第二趟:以“十位”进行分配…同上
  • 第三趟:以“百位”进行分配…同上
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、定义格式:

表长为n
d元组是:d趟分配和收集。例如一个百位数字123,拆成3元组:个位,十位,百位。
r基数是:例如数字是0~9。所以数字基数就是10。也就是说十个队列。也就是说r个辅助队列。
权重:例如百位》十位》个位。也就是百位对数字影响力最大,其次十位,其次个位。
在这里插入图片描述
递减:就是先收集值为更大的,依次从大到小。
在这里插入图片描述
递减:就是先收集值为更小的,依次从小到大。
在这里插入图片描述

二、复杂度

需要r个辅助队列,那么空间复杂度是 0(r)
在这里插入图片描述

三、稳定性:稳定

四、基数排序的应用

在这里插入图片描述

在某种情况下,基数排序是大于堆排序和快速排序
在这里插入图片描述

1、基数擅长解决的问题:

在这里插入图片描述

2.举反例:

  1. 给5个人的身份证号排序:
    d比较大,代表的是元组个数,分组的多少。那么需要拆分为18组,进行18次分配和回收。d
  2. 给中文名,进行排序:
    r比较大,r代表的是队列个数比较大。因为汉字太多了,每一个字就要对应一个队列,从而队列太多。
  3. 数组元素个数n比较大:效率是很好的,比快排和堆排还要好。

Guess you like

Origin blog.csdn.net/weixin_43989347/article/details/117669259