无风无影

   ::  :: 新随笔  ::  ::  :: 管理

基数排序

 1 public class RadixSort {
 2     public static void main(String[] args) {
 3         int [] array={88,11,2,1,19,88,77,66,99,88,101,77,3003,202};
 4         int maxCount=getMaxCount(array);
 5         radixSort(array,maxCount*10,1);
 6         for(int i=0;i<array.length;i++){
 7             System.out.print(array[i]+" ");
 8         }
 9     }
10 
11     private static int getMaxCount(int[] array){
12         double max=0;
13         for(int i:array){
14             int length=String.valueOf(i).length();
15             if(String.valueOf(i).length()>max){
16                 max=length;
17             }
18         }
19         return (int)Math.pow(10,max-1);
20     }
21 
22     
23     private static void radixSort(int[] array,int maxBit,int fromBit){
24         if(maxBit<=fromBit) return;
25         int[][] sortArray=new int[10][array.length];
26         int[] order=new int[array.length]; //记录0-9占用的元素个数
27         for(int i=0;i<array.length;i++){
28             int index=(array[i]/fromBit)%10;
29             sortArray[index][order[index]++]=array[i];
30         }
31         int index=0;
32         for(int i=0;i<sortArray.length;i++){
33             for(int j=0;j<order[i];j++){
34                 array[index++]=sortArray[i][j];
35             }
36         }
37         radixSort(array,maxBit,fromBit*10);
38     }
39 }
View Code

 

posted on 2018-05-29 12:55  NWNS-无风无影  阅读(119)  评论(0)    收藏  举报