基数排序(Radix sort)是一种非比较型整数排序算法,其基本思想为:
一个待排序整数序列,将其中每个整数看成由不同位构成(比如,个位十位百位千位...)。
可以先按个位的数值,将这些数分配到0~9的10个桶中,然后再按从0到9的顺序把这些数从10个桶中收集回来,这时这些数就已经按照个位排好序了。
然后再按照10位上的数值,把这些数分配到10个桶中,分配完毕后再次收集回来,这时这些数就已经按照十位和个位排好序了。
再按百位、千位依次进行上述过程,直到排序的位数到达数列中最大数的最高位,则排序结束。
由于计算机中字符、浮点等都是由整数来表示的,因此基数排序算法是一种普适性的算法,可以用于整数、字符、浮点数排序。
基数排序算法的核心过程,包括:
1. 计算出待排序数列的最大值 max
2. 计算出最大值的最高位位数 div_cnt
3. 分配内存,代表0~9的10个桶,用于存储数据
4. 循环div_cnt 次,每次根据一个分位(个位,十位,百位...),将这些数据分配到桶中,然后再按桶的顺序将数据收集回来。循环结束后,数据就已经是排好序的了。
5. 释放内存。
基数排序,用一个例子来图解说明:
待排序数列:
36, 341, 45, 8, 257
准备10个桶,存储从0到9的分位值: