// 创建一个for 循环,从1 到d for j = 1 to d do int count[10] = {0}; // 将键的计数放在数组count[] 中 // 键key - 是在位数j 上的数字 for i = 0 to n do count[key of(A[i]) in pass j]++ for k = 1 to 10 do count[k] = count[k] + count[k-1] // 创建一个结果数组,通过从count[k] 中检查A[i] 中的新位置 for i = n-1 downto 0 do result[ count[key of(A[i])] ] = A[j] count[key of(A[i])]-- //现在主数组A[] 包含了根据现在位数位置排好序的数字 for i=0 to n do A[i] = result[i] end for(j) end func
private static void radixSort(int []array){ //取最大值,好计算位数 int max = Integer.MIN_VALUE; for (int a:array) { if(a> max) { max = a; } } //(0~9)10个桶 int [][]buckets = new int[10][];
//初始化桶 for(int b=0;b<10;b++) { buckets[b] = new int[array.length]; }
//每个桶的元素数量 int [] index = new int[10]; //按每一位数排序 for (int radix = 1;max/radix>0;radix*=10){ //把元素放到各自的桶内 for (int a:array) { //得到每位数 int per = a/radix%10; buckets[per][index[per]] = a; index[per]++; } //各个桶的数据依次放回数组 int j = 0; for (int b=0;b<10;b++) { //去掉桶中别的元素 for (int i = 0;i<index[b];i++){ array[j++] = buckets[b][i]; } } System.err.println("按第"+radix+"位,排序:" + Arrays.toString(array)); //清空计数器 index = new int[10]; } }