学习首页/排序算法/基数排序交互演示 · JavaScript

代码与动画 RADIX SORT · LSD

基数排序.

从个位起按当前数位稳定分桶,再按桶号依次收集。

时间 O(d(n + 10))空间 O(n + 10)非负整数

原理与执行逻辑

按个位、十位、百位依次执行稳定分桶。每轮只处理当前数位,但稳定性会保留较低数位已经建立的顺序,最终形成完整升序。

执行步骤

  1. 创建十个桶,从个位开始。
  2. 按当前数组顺序计算数位,将元素追加到对应桶尾部。
  3. 从桶 0 到桶 9 依次收集,桶内顺序保持不变。
  4. 处理更高一位,直到覆盖最大值的全部数位。

关键理解

每轮分桶必须稳定,否则高位相同的元素可能丢失低位顺序。当前 Demo 限定非负整数,位数不足的高位视为 0。

简短示例

[21, 12, 11] 按个位收集为 [21, 11, 12];再按十位收集为 [11, 12, 21]。

代码与执行动画

STEP 0 / 31
基数排序
function radixSort(values) {  let a = [...values]; const max = Math.max(...a);  for (let exp = 1; exp <= Math.max(1, max); exp *= 10) {    const buckets = Array.from({length: 10}, () => []);    for (const value of a) {      const digit = Math.floor(value / exp) % 10;      buckets[digit].push(value);    }    a = buckets.flat();  }  return a;}
12 行 · 0 个片段标记
170a[0]45a[1]75a[2]90a[3]802a[4]24a[5]2a[6]66a[7]桶 0空桶 1空桶 2空桶 3空桶 4空桶 5空桶 6空桶 7空桶 8空桶 9空
当前数据正在操作已访问 / 命中标记 / 指针
0

准备按数位排序

上行是数组,下方是桶 0 至 9;桶内按进入顺序保存数值。

配置演示数据

应用后重新生成执行过程,可单步观察结果。

实现说明

基数排序的操作规则

演示十进制 LSD 基数排序,元素按原顺序进入桶以保持稳定性。支持 0 与重复值,最多三轮;不处理负数。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。

  • 可用基数排序后扫描相邻差值;题目要求线性时间、线性额外空间,需要处理非负整数与空桶。

  • 排序扩展练习;题目包含负数,需要增加偏移或有符号数处理。