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<LinkedList> queue= new LinkedList<LinkedList>();
           for(int r =0;r <radix ;r ++){
              LinkedList<Integer> queue1= new LinkedList<Integer> (); 
               queue.offer( queue1);   //offer用于queue中(Linkedlist同时实现了List和queue接口),add用于List中
          }
           //最大元素的位数,进行digits次分配和收集
           for(int i =0;i <digits ;i ++){
               //分配数组元素
               for(int j =0;j <data .length;j ++){
                    //得到digits的第i+1位
                    int r =(int)(data[j]%Math. pow(radix , i+1)/Math.pow( radix, i));
                   LinkedList<Integer> queue2=queue .get(r );
                    queue2.offer( data[ j]);
                    queue.set( r, queue2);
              }
               //将收集队列元素
               int count =0;
               for(int k =0;k <radix ;k ++){
                    while(queue .get(k ).size()>0){
                         data[ count++]=(Integer) queue.get( k).poll();
                   }
              }
          }
     }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值