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;
}
}
}
基数排序
最新推荐文章于 2025-03-03 19:59:24 发布
本文深入解析基数排序算法的实现过程,通过示例代码详细说明如何找出最大值,确定排序次数,使用二维数组作为桶来存放数据,以及如何通过遍历和重新填充数组完成排序。适用于对线性时间复杂度排序算法感兴趣的学习者。
4807

被折叠的 条评论
为什么被折叠?



