基数排序(Radix Sort)

基数排序按数字位依次排序,依赖稳定排序保持低位排序结果,是计数排序在多位整数上的扩展应用。

定义

基数排序(Radix Sort)是一种非比较排序算法。它将待排序元素按“位”拆解,从低位到高位依次进行稳定排序,最终得到整体有序结果。

这里的“基数”(radix)指进制。例如十进制整数的基数是 10,二进制整数的基数是 2。

核心特性

特性 说明
排序类型 非比较排序
基础子过程 通常使用稳定版 计数排序
稳定性要求 每一位排序都必须稳定
数据要求 整数,或可以映射成整数的值
时间复杂度 O(d * (n + k)),d 为位数,k 为基数
空间复杂度 O(n + k)

基本原理

以十进制整数为例:

  1. 按个位数稳定排序
  2. 按十位数稳定排序
  3. 按百位数稳定排序
  4. 重复直到最高位

由于每一轮排序都是稳定的,高位排序不会破坏低位已经建立好的相对顺序。

原始数据: 329, 457, 839, 439, 720, 355, 350
个位排序: 720, 350, 355, 457, 329, 839, 439
十位排序: 720, 329, 839, 439, 350, 355, 457
百位排序: 329, 350, 355, 439, 457, 720, 839

与计数排序、桶排序的关系

维度 基数排序 计数排序 桶排序
核心思路 按位多轮排序 统计每个值出现次数 将元素映射到桶中
典型数据 多位整数 范围较小的整数 分布较均匀的数据
稳定性要求 必须稳定 可实现为稳定 取决于桶内排序
关系 常用计数排序作为每一位的子过程 基数排序的常用子过程 常被拿来对比,但不是同一思路

注意事项

  • 基数排序不是通用比较排序,输入必须能按位拆解或映射为整数
  • 每一位排序必须稳定,否则低位顺序会被破坏
  • 处理负数、不同位数、字符串等场景时需要额外映射策略
  • 当位数 d 较大时,复杂度优势会下降

应用场景

  • 整数排序
  • 固定位数编号排序
  • 可以映射为整数键的字符串或对象排序
  • 需要线性级排序且数据形态适合按位处理的场景

相关概念

参考资料


Interactive Graph