参考:https://www.cnblogs.com/onepixel/articles/7674659.html
其他排序算法传送门:https://blog.csdn.net/jkdcoach/article/details/87442482
源码:https://github.com/sunrui849/sort
基数排序
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。
1.1 算法描述
- 取得数组中的最大数,并取得位数;
- arr为原始数组,从最低位开始取每个位组成radix数组;
- 对radix进行计数排序(利用计数排序适用于小范围数的特点);
1.2 动图演示
1.3特性
效果不如桶排序或计数排序。。
1.4代码实现
//最大数量级
private static final int maxLevel = 100;
/**
* 从小到大
* 基数排序
* @param arr
* @return
*/
public static int[] sort(int[] arr) {
int level = 1;
int index = 0;
List<List<Integer>> bucket = new ArrayList<List<Integer>>(10);
while (level <= maxLevel) {
//初始化容器
for (int i = 0; i < 10; i++) {
bucket.add(new ArrayList<Integer>());
}
//按基数存入到容器内
for (int value : arr){
int num = (value/level)%10;//基数位置大小
bucket.get(num).add(value);
}
//更新数组内数据
for (List<Integer> content : bucket){
for (Integer value : content) {
arr[index++] = value;
}
}
level *= 10;
index = 0;
bucket.clear();
}
return arr;
}