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 );
}
}
}