参考:http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html
因为在看后缀数组时需要用到基数排序,所以把基数排序稍微看了下,平时对基数排序用的比较少,也没太关注。。参考中讲得比较详细,包括举例与实现等。这里主要介绍下基数排序的想法以及使用范围。
对于基数排序,一般都是在用于多个关键字排序中,比如说对一组两位数的数字进行排序(12, 22, 11....),一共分为两个关键字,十位的数字以及个位的数字,并且十位的关键字比个位的关键字优先(实际过程中,各关键字只要求有优先顺序即可),先对一个关键字进行排序,然后再在第一个关键字排序的基础上进行第二个关键字的排序,最后形成有序的序列。
而对一个关键字的排序过程可以看成是一个“分配与收集”的过程,对于数字可以看成有十个桶(0~9),然后按照关键字依次将数字放到桶中,然后再按照从固定的顺序(依照是从大到小还是小到大)收集,再对第二关键字排序,依次.....
可以看出,基数排序中的关键字一般是取值范围比较小,并且有限,比较常见的是字母与数字,当然一些串可以hash处理下来使用。
时间复杂度是O( l + n ), l是关键字数, n是待排序数数量。