zoukankan      html  css  js  c++  java
  • 排序算法之JAVA基数排序算法

    package net.qh.test.sort;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by Administrator on 2016/03/07.
     */
    public class Radix {
    
        public static int[] asc( int[] array ){
    
            int index = 1; /** 最大数字位数(如100为3位数字,2000为4位数字) */
            /** 取得最大数字位数 */
            for( int i = 0 ; i < array.length ; i++ ){
                int length = Integer.toString(array[i]).length();
                if( index < length ){
                    index = length;
                }
            }
            return sort( array , 0 , index);
    
        }
    
    
    
        /**
         * @param array 数组
         * @param exponent 起始位数(代码中实际意义为:10的exponent次方。起始位数即为10的0次方,所以为个位)
         * @param index 最大数字位数(如100为3位数字,2000为4位数字)
         */
        private static int[] sort( int[] array , int exponent , int index){
    
            int length = array.length;
            /** 此处我选择用List,而不是int[n][n]的数组 */
            List<List<Integer>> list = new ArrayList<List<Integer>>();
            for( int i = 0 ; i < 10  ; i++ ){
                list.add(new ArrayList<Integer>());
            }
    
            /** 按照各个位数排序统计 */
            for( int i = 0 ; i < length ; i++ ){
                int num = 0;
                String str = Integer.toString(array[i]);
                if( str.length() - exponent - 1 >= 0 ){
                    num = Integer.parseInt(str.substring(str.length() - exponent - 1, str.length() - exponent));
                }
                list.get(num).add(array[i]);
            }
    
            /** 串起桶中数据 */
            for( int k = 0 , i = 0 ; i < list.size() ; i++ ){
                for( int j = 0 ; j < list.get(i).size() ; j++ ){
                    array[ k++ ] = list.get(i).get(j);
                }
            }
    
            /** 若还有更高位数,则按照下一位数进行排序 */
            if( index == ++exponent ){
                return array;
            }else{
                return sort( array , exponent , index );
            }
    
        }
    
    }
    

      

  • 相关阅读:
    ASP.NET学习篇(4)——服务器端的控件【转自www.bitsCN.com】
    sql2005 管道的另一端上无任何进程解决方法
    SQL服务器名称的更改
    如何辨别移动硬盘的好坏
    ADO绑定SQL数据库过程
    SQL变量的使用
    SQL子查询
    什么SQL解发器?
    什么是存储过程呢?
    显式事务和隐式事务之间有什么区别?
  • 原文地址:https://www.cnblogs.com/aDiot/p/5250750.html
Copyright © 2011-2022 走看看