public class Test {
public static void main(String[] args) {
Integer[] arr = {15,25,105,78,34,21,32,41};
int maxBit = 0;
for (int i : arr) {
maxBit = Math.max(String.valueOf(i).length(), maxBit);
}
for (Integer i : MSD(arr, (int) Math.pow(10,maxBit)) ) {
System.out.println(i);
}
}
static Integer[] MSD(Integer[] arr, int bit) {
if (arr == null || arr.length < 1) {
return null;
}
// 创建桶
HashMap<Integer, List<Integer>> map = new HashMap<>(10);
// 分配
for (int i = 0; i < arr.length; i++) {
int index = (arr[i] / bit) % 10;
if (map.get(index) == null) {
map.put(index, new ArrayList<>());
}
map.get(index).add(arr[i]);
}
// 递归整理子桶,并整理结果
List<Integer> resList = new ArrayList<>(10);
for (List<Integer> list : map.values()) {
if (list.size() > 1) {
Integer[] sub = new Integer[list.size()];
list = Arrays.asList(MSD(list.toArray(sub), bit / 10));
}
resList.addAll(list);
}
Integer[] res = new Integer[resList.size()];
return resList.toArray(res);
}
}
基数排序-MSD
最新推荐文章于 2024-06-20 20:52:31 发布