把完整键分成若干位置

数字可以按二进制位或字节拆分,字符串可以按字符位置拆分。基数R描述每一位置可能取多少值,例如一个字节有256种值。算法通过这些局部类别分组,把对完整键的排序转化为对若干位置的处理。

位置顺序必须反映所需的整体顺序。固定长度、相同编码的键较容易说明;有符号整数的最高字节则需要把负值区域放在非负值之前。教材的整数实现专门调整这一顺序,不能把原始无符号字节顺序直接套用为有符号数值顺序。

参考:[1]

最低位版本依赖稳定分配

最低位优先版本先排最不重要的位置,再逐步向更重要位置移动。每轮都须保留本轮同键组内部已有次序,才能让先前处理的低位继续作为同高位值之间的次级顺序;稳定计数分配是实现这种要求的一种方式。

对宽度为W、每位范围为R的固定长度键,常见版本进行W轮,每轮O(n+R),总时间为O(W(n+R))。把W或R视为常数才可简写成随n线性;键越来越长时,逐位读取仍然需要实际工作。

参考:[1]

最高位版本按前缀继续细分

最高位优先版本先按最重要位置分组,再在每个组内处理下一位置。字符串实现可以用专门的结束标记区分某个键已经结束,并让较短前缀排在其扩展之前;结束组不再继续递归。

不同基数、缓冲区安排和小组优化会改变资源消耗。字符顺序也不等于所有语言地区的字典顺序;Unicode编码、大小写和组合字符等要求,需要另外定义键。基数排序提供按表示分组的机制,不会替应用决定比较语义。

参考:[2] [3]