实现思路:
代码实现:
import java.util.Arrays;
/**
* @Author: PurcellHuang
* @Date: 2019-08-08 13:28
* 基数排序
*/
public class RadixSort {
public static void sort(int[]a){
int maxNum = Integer.MIN_VALUE;
//找数组中最大值
for (int i = 0; i < a.length; i++){
if (a[i] > maxNum){
maxNum = a[i];
}
}
//System.out.println(maxNum);
int maxRadix = (maxNum+"").length(); //最高位数
//System.out.println(maxRadix);
int [][]b = new int[10][a.length]; //桶
int [] count = new int[10]; //记录桶的数据index
for (int i = 0, n = 1; i < maxRadix; i++,n*=10){
//计算余数并放桶里
for (int j = 0; j < a.length; j++){
int ys = a[j]/n%10;
b[ys][count[ys]++] = a[j];
}
//把桶中数据放回数组
int index = 0;
for (int k = 0; k < count.length; k++){
if(count[k]!=0){
for(int l = 0; l < count[k]; l++){
a[index++] = b[k][l];
}
count[k] = 0;
}
}
}
}
public static void main(String[] args) {
int []a = {2,4,5,2,1,88,8,9,21,2,5};
RadixSort.sort(a);
System.out.println(Arrays.toString(a));
}
}