public static void Redix(int[] arrs) {
int maxValue = arrs[0];
//找出要排序的次数 个位,十位,
for (int i = 0; i < arrs.length; i++) {
if (arrs[i] > maxValue) {
maxValue = arrs[i];
}
}
//要排序的次数
int len = (maxValue + "").length();
//存放数据的数组
int[][] value = new int[10][arrs.length];
//每个桶中可能存放的数据
int[] elementLen = new int[10];
int eleIndex = 0;
for (int i = 0, n = 1; i < len; i++, n *= 10) {
for (int j = 0; j < arrs.length; j++) {
int curentIndex = arrs[j] / n % 10;
//elementLen[curentIndex] 当前的大小 初始时为0
value[curentIndex][elementLen[curentIndex]] = arrs[j];
elementLen[curentIndex]++;
}
int index = 0;//新数组的下标
//每遍历一次后从桶中去取出 进行下一位的遍历
//总共的桶数
for (int k = 0; k < elementLen.length; k++) {
//该桶的长度
if (elementLen[k] != 0) {
for (int m = 0; m < elementLen[k]; m++) {
arrs[index] = value[k][m];
index++;
}
}
// 把桶的大小设为0 从而清空桶中的数据
elementLen[k] = 0;
}
}
}
07-15
3035
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交