目录
概述
代码实现
package Part7;
public class RadixSort {
static int t;
public static void main(String[] args) {
int[] arr = {53,3,542,748,14,214};//要排序的数组
findMax(arr);//找到数组中最大的数的位数
sort(arr);//排序
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void findMax(int[] arr){
int index = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] > arr[0]){
index = i;
}
}
int temp = arr[index];
for (t = 10; (temp/t) != 0 ;) {
t *= 10;
}
}
public static void sort(int[] arr){
int[][] sorRadix = new int[10][arr.length];//定义桶
int[] radixIndex = new int[10];//定义每个桶存放了多少个数据
for (int n = 1; n < t; n *= 10) {// 用于对数据的取余递增
for (int i = 0; i < arr.length; i++) {//对当前位数上的数进行对应排序
int temp = arr[i]/ n % 10;
sorRadix[temp][radixIndex[temp]] = arr[i];
radixIndex[temp]++;// 如果有数据入桶, 则该桶数据量+1
}
int index=0;
for(int i = 0; i < radixIndex.length; i++){// 把桶中的数据归还原数组
if(radixIndex[i] != 0){//判断每个桶中是否有数据, 与数据的个数
for (int j = 0; j < radixIndex[i]; j++) {
arr[index] = sorRadix[i][j];
index++;
}
radixIndex[i] = 0;
}
}
}
}
}