基数排序
基数排序是一种使用关键字的排序算法,是一种不需要比较的排序算法。
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 }
你为什么不努力。。