Java排序算法(八)--基数排序(RadixSort)

基数排序:需要借助radix个队列来暂时存储元素。
思想:
1.new一个元素为LinkedList的queue,用来存放各个基数的队列;
2.新建radix个元素为整数的queue1(命名一样),均存放在queue中;
3.根据最大元素的位数,对数组进行max_digits次分配和收集;
4.从低位到高位,计算data[j]的该位上的值r,放在queue中的第r个LinkedList中(需要借助临时的Linkedlist表queue2);
5.根据每一位的分配完成后,将LinkedListqueue中的数据从前到后收集起来一次(即对数组进行了一次排序)。

import java.util.LinkedList;
publicstaticvoidradixSort (int[]data,intradix,intdigits){ //radix表示基数(进制),digits表示最大数值位数 
          LinkedList queue= new LinkedList();
           for(int r =0;r  queue1= new LinkedList (); 
               queue.offer( queue1);   //offer用于queue中(Linkedlist同时实现了List和queue接口),add用于List中
          }
           //最大元素的位数,进行digits次分配和收集
           for(int i =0;i //分配数组元素
               for(int j =0;j //得到digits的第i+1位
                    int r =(int)(data[j]%Math. pow(radix , i+1)/Math.pow( radix, i));
                   LinkedList queue2=queue .get(r );
                    queue2.offer( data[ j]);
                    queue.set( r, queue2);
              }
               //将收集队列元素
               int count =0;
               for(int k =0;k while(queue .get(k ).size()>0){
                         data[ count++]=(Integer) queue.get( k).poll();
                   }
              }
          }
     }

你可能感兴趣的:(排序,Java编程-算法)