zoukankan      html  css  js  c++  java
  • 基数排序

    使用10个辅助队列,假设最大数的数字位数为 x, 则一共做x次,从个位数开始往前,以第i位数字的大小为依据,将数据放进辅助队列,搞定之后回收。下次再以高一位开始的数字位为依据。

    以Vector作辅助队列,基数排序的Java代码:

    
    public class RadixSort {
    
         private int keyNum=-1;   
    
         private Vector<Vector<Double>> util;
    
    
    
         public void distribute(double [] sorted, int nth){       
    
             if(nth<=keyNum && nth>0){
    
                  util=new Vector<Vector<Double>>();
    
                  for(int j=0;j<10;j++){
    
                       Vector <Double> temp= new Vector <Double>();
    
                       util.add(temp);
    
                  }            
    
                  for(int j=0;j<sorted.length;j++){
    
                       int index= getNthDigit(sorted[j],nth);
    
                       util.get(index).add(sorted[j]);
    
                  }
    
             }
    
         }   
    
         public int getNthDigit(double num,int nth){
    
             String nn= Integer.toString((int)num);
    
             int len= nn.length();
    
             if(len>=nth){
    
                  return Character.getNumericValue(nn.charAt(len-nth)); 
    
             }else{
    
                  return 0;
    
             }            
    
         }
    
         public void collect(double [] sorted){
    
             int k=0;
    
             for(int j=0;j<10;j++){
    
                  int len= util.get(j).size();
    
                  if(len>0){
    
                       for(int i=0;i<len;i++){
    
                           sorted[k++]= util.get(j).get(i);
    
                       }
    
                  }
    
             }
    
             util=null;
    
         }
    
         public int getKeyNum(double [] sorted){    
    
             double max= Double.MIN_VALUE;
    
             for(int j=0;j<sorted.length;j++){
    
                  if(sorted[j]>max){
    
                       max= sorted[j];
    
                  }
    
             }       
    
             return Integer.toString((int)max).length();
    
         }
    
         public void radixSort(double [] sorted){
    
             if(keyNum==-1){            
    
                  keyNum= getKeyNum(sorted);
    
             }
    
             for(int i=1;i<=keyNum;i++){
    
                  distribute(sorted,i);
    
                  collect(sorted);           
    
             }
    
         }
    
         public static void main(String[] args) {
    
             Random random = new Random(6);
    
    
    
             int arraysize = 21;
    
             double[] sorted = new double[arraysize];
    
             System.out.print("Before Sort:");
    
             for (int j = 0; j < arraysize; j++) {
    
                  sorted[j] = (int) (random.nextDouble() * 100);
    
                  System.out.print((int) sorted[j] + " ");
    
             }
    
             System.out.println();
    
    
    
             RadixSort sorter = new RadixSort();
    
             sorter.radixSort(sorted);
    
             System.out.print("After Sort:");
    
             for (int j = 0; j < sorted.length; j++) {
    
                  System.out.print((int) sorted[j] + " ");
    
             }
    
             System.out.println();
    
         }
    
    }
  • 相关阅读:
    python异常处理
    装饰器汇总
    PHP PDO预定义常量
    [转载]Firebird与MySQL:一个使用者的体会
    卸载AppDomain动态调用DLL异步线程执行失败
    c#数据库访问读取数据速度测试
    iis最大工作进程数
    WINCE 获取智能设备唯一编号
    通过 JDBC 驱动程序使用大容量复制
    IIS出现问题时修改配置文件的几项说明
  • 原文地址:https://www.cnblogs.com/yuyu666/p/9828087.html
Copyright © 2011-2022 走看看