程序员必知的8大排序(java实现)(四)(基数排序)

8、基数排序

  (1)基本思想:

  将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

  (2)实例:

  (3)用java实现

 
 
import java.util.ArrayList;
import java.util.List;
public class radixSort {
     int a[]={ 49 , 38 , 65 , 97 , 76 , 13 , 27 , 49 , 78 , 34 , 12 , 64 , 5 , 4 , 62 , 99 , 98 , 54 , 101 , 56 , 17 , 18 , 23 , 34 , 15 , 35 , 25 };
public radixSort(){
     sort(a);
     for ( int i= 0 ;i<a.length;i++)
         System.out.println(a[i]);
}
public  void sort( int [] array){              
             //首先确定排序的趟数;  
         int max=array[ 0 ];  
         for ( int i= 1 ;i<array.length;i++){  
                if (array[i]>max){  
                 max=array[i];  
                }  
         }  
     int time= 0 ;  
            //判断位数;  
             while (max> 0 ){  
                max/= 10 ;  
                 time++;  
             }             
         //建立10个队列;  
             List<ArrayList> queue= new ArrayList<ArrayList>();  
             for ( int i= 0 ;i< 10 ;i++){  
                 ArrayList<Integer> queue1= new ArrayList<Integer>();
                 queue.add(queue1);  
         }           
             //进行time次分配和收集;  
             for ( int i= 0 ;i<time;i++){      
                 //分配数组元素;  
                for ( int j= 0 ;j<array.length;j++){  
                     //得到数字的第time+1位数;
                    int x=array[j]%( int )Math.pow( 10 , i+ 1 )/( int )Math.pow( 10 , i);
                    ArrayList<Integer> queue2=queue.get(x);
                    queue2.add(array[j]);
                    queue.set(x, queue2);
             }  
                int count= 0 ; //元素计数器;  
             //收集队列元素;  
                for ( int k= 0 ;k< 10 ;k++){
                 while (queue.get(k).size()> 0 ){
                     ArrayList<Integer> queue3=queue.get(k);
                     array[count]=queue3.get( 0 );  
                     queue3.remove( 0 );
                     count++;
               }  
             }  
     }            
   
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值