跟着注释不迷路:
public class BaseSort {
public static int[] basicSort(int[] array) {
//1、取出最大元素max
int max = 0;
for (int k : array) {
if (k > max) {
max = k;
}
}
//2、(max为int类型)计算max的位数times
int times = 0;
while (max > 0) {
max = max / 10;
times++;
}
//3、构造一个List结构,用于按一定规则存放元素
List<List<Integer>> queen = new LinkedList<>();
for (int i = 0; i < 10; i++) {
//添加10个空的list元素用来存元素(数字0~9是10个数,对应数字的每位上的所有可能值)
List<Integer> q = new LinkedList<>();
queen.add(q);
}
//4、指定存放规则:依次按个、十、百。。。位的值num存放在queen的第num个位置
//max是几位数就循环几次
for (int i = 0; i < times; i++) {
for (int k : array) {
//Math.pow(10, i)是10的i次方
//x为queen的索引,依次按个、十、百。。。max确定元素在queen上的位置
int x = k % (int) Math.pow(10, i + 1) / (int) Math.pow(10, i);
List<Integer> q = queen.get(x);
q.add(k);
}
//以上循环结束后每个元素在queen上的第几个位置就确定了
//5、暂存以上排序结果:
// 从queen上按序取出每个位置上list中的值放到数组中,这样数组就有序了
int count = 0;
for (int j = 0; j < 10; j++) {
//不遍历空list
while (!queen.get(j).isEmpty()) {
//将queen上的元素按序移动到数组中以保存queen上元素顺序并清空queen
List<Integer> c = queen.get(j);
array[count] = c.get(0);
c.remove(0);
count++;
}
}
}
return array;
}
}
测试类:
public class TestSort {
int[] array = {8, 31, 36, 177, 132, 5, 21, 14};
@Test
public void baseSort() {
int[] sort = BaseSort.basicSort(array);
for (int i : sort) {
System.out.println(i);
}
}
}