排序算法之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 );
        }

    }

}

  

转载于:https://www.cnblogs.com/aDiot/p/5250750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值