基数排序

1.定义

1)将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

2.个人理解

首先获取最大值,看他有几位数就循环几次,首先构建10个队列,从0到9,首先看数组里元素的个位数,按个位数是i依次加入到为i的队列里,然后再把数组重新赋值,从队列0移除所有元素,一直到队列9,再从个位数j获取放到队列j里,直到循环结束

3.图示讲解

eEIKfK.md.png

eEI16e.md.png

eEIJ0A.md.png

4.代码讲解

找出最大值,看是几位就循环几次,然后依次获取个位数加入对应的队列再给arr赋值把队列清空,在获取十位,直到结束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void main(String[] args) {
int[] arr={53,63,542,748,14,214};
int max=arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max){
max=arr[i];
}
}
int count=(max+"").length();//要循环的次数
Queue<Integer> [] queues=new Queue[10];
for (int i = 0; i < queues.length; i++) {
queues[i]=new LinkedList<>();
}
for (int i = 0,n=1 ; i < count; i++,n*=10) {
for (int j = 0; j < arr.length; j++) {
int tem=arr[j]/n%10;//获取数字
queues[tem].add(arr[j]);
}
int t=0;
for (int j = 0; j < queues.length; j++) {
while (!queues[j].isEmpty()){
arr[t]=queues[j].remove();

t++;
}
}

}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}