基本思想:将所有待比较的值进行统一长度,位数较短的后面进行补零,然后从最低位开始依次进行排序,这样从最低位到最高位排序完成即完成整个排序。
public static void radixSort(int[] arr) {
//求出最大值
int max = Integer.MIN_VALUE;
for(int i : arr) {
if(i > max) {
max = i;
}
}
//计算最大值的长度,即循环次数
int maxLength = (max+"").length();
//创建桶 十个桶
Map<Integer,ArrayDeque> radixMap = new HashMap<Integer,ArrayDeque>();
for(int i=0;i<10;i++) {
radixMap.put(i, new ArrayDeque<>());
}
//开始循环
//定义循环需要取模的值
int cycle = 1;
for(int i = 0;i < maxLength ;i++) {
//1,桶中放数据
for(int j = 0; j < arr.length ; j++) {
int bucket = (arr[j]/cycle)%10;
radixMap.get(bucket).addFirst(arr[j]);
}
int index = 0;
for(int k= 0; k<10 ; k++) {
ArrayDeque deque = radixMap.get(k);
Integer temp;
while((temp = (Integer) deque.pollLast()) != null) {
arr[index++] = temp;
}
}
cycle *= 10;
}
}

本文解析了基数排序的基本思想,通过将数值补零达到统一长度,按最低位到最高位逐位排序。通过Java代码展示了如何使用桶排序法实现这一算法,适用于整数数组的快速排序。
1129

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



