原理:
1、按照0-9定义十个空间,将数据按照个位,十位、百位····依次进行排序(每一进制位排完序后取出,按照下一进制位再次排序,重复操作,直到最高位)
代码:
package 排序;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] arr = {5,55,6,48,872,62,4};
sort(arr);
System.out.println(Arrays.toString(arr));
}
//基数排序
public static void sort(int[] arr) {
//找数组当中的最大值
int max =arr[0];
for(int j=0;j<arr.length;j++) {
if(arr[j]>max) {
max=arr[j];
}
}
//获取最大值的位数
int maxLength = (max+"").length();//加"",max变为字符串
//定义空间
int[][] bucket = new int[10][arr.length];
//定义空间记录工具
int [] bucketCounts = new int[10];
int n=1;
for(int h=0;h<maxLength;h++) {
//将数据放到空间里
for(int i=0;i<arr.length;i++) {
//放到哪个空间
int element = arr[i]/n%10;//获取个位数值,element代表进制位数值,也代表放到哪个空间
//读取空间记录工具,确定放到空间哪个位置
int count = bucketCounts[element];
//数据放入
bucket[element][count] = arr[i];
//空间记录+1
bucketCounts[element]++;
}
//数据取出
//遍历数组
int index=0;
//遍历空间记录
for(int k=0;k<bucketCounts.length;k++) {
if(bucketCounts[k]!=0) {
for(int l = 0;l<bucketCounts[k];l++) {
arr[index] = bucket[k][l];
index++;
}
}
bucketCounts[k]=0;
}
n=n*10;
}
}
}