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 ); } } }
时间: 2024-10-30 16:46:41