基数排序

 

 

基数排序是一种使用关键字的排序算法,是一种不需要比较的排序算法。

 1 import java.util.Arrays;
 2 import java.util.LinkedList;
 3 import java.util.Queue;
 4 
 5 public class MyRadixSort {
 6     public static void main(String[] args) {
 7         int num[] = {10, 8, 33, 54, 1, 6, 12, 43, 32, 27};
 8         radixSort(num);
 9         System.out.println(Arrays.toString(num));
10     }
11 
12     private static void radixSort(int[] num) {
13         int m = getMax(num);   //用来寻找最大元素长度
14         int n = 1;   //用来取位,1用来表示取个位数字,10用来表示十位数字
15         //表示0-9的每一个桶
16         Queue buckets[] = new Queue[10];
17         for (int i = 0; i < buckets.length ; i++) {
18             buckets[i] = new LinkedList();
19         }
20         /*
21         不可以用Arrays.fill(buckets, new LinkedList<Integer>());
22         因为该语句会将所有数组元素添加同一个队列对象,需要用不同的对象进行初始化
23          */
24         //当基数排序次数小于len时,继续进行基数排序
25         while (n < m) {
26             //使用基数排序时需要从低位开始,因为在比较过程中有些数字可能没有高位
27             for (int x : num) {
28                 int val = (x / n) % 10;
29                 buckets[val].offer(x);
30             }
31 
32             int k = 0;
33             for (Queue queue : buckets) {
34                 while (!queue.isEmpty()) {
35                     num[k] = (int) queue.poll();
36                     k++;
37                 }
38             }
39             n *= 10;
40         }
41     }
42 
43     private static int getMax(int[] num) {
44         int max = num[0];
45         for (int i = 0; i < num.length; i++) {
46             if (num[i] > max) {
47                 max = num[i];
48             }
49         }
50         return max;
51     }
52 }

 

posted on 2020-07-25 15:17  含光Aries  阅读(249)  评论(0编辑  收藏  举报