一: 什么是基数排序 (简单的说就是从个位数开始,再排十位数,再排百位… 位数不够补0)
①基数排序属于“分配排序”, 它是通过键值的各个值,将要排序的的元素分配至某些桶中,达到排序的目的
②基数排序是属于稳定的排序,基数排序的效率高的稳定排序的排序法
③基数排序是桶排序的扩展
二: 我们需要用二维数组模拟 (0-9) 这几个数的桶,依次取出待排序的数,再进行取出
三: 我这里直接举例只有个位数的排序,多位数的就再写一遍即可
import java.util.Arrays;
public class Basic_Sort {
public static void main(String[] args) {
int arr[]={5,4,8,7,2,1,9,7,8,2};
int temp[]=new int[arr.length];
int[] sort = sort(arr,temp,0,arr.length-1);
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int arr[],int temp[],int begin,int end){
int temps;
// 把桶弄出来 二维数组模拟桶
int bucket[][]=new int[10][arr.length];
// 记录桶中的数据 对应的是桶的深度 最多只有数据的个数 但是必须取值为 0-9 否则无法加入数据
int recode[]=new int[10];
// 往桶里存放数据
for(int i=0;i<arr.length;i++){
// 取出个位数
temps=arr[i]%10; // 542%10
// 加入桶中 加到哪个桶? temps 就代表了哪个桶 temps号桶的第 0 个开始加
bucket[temps][recode[temps]]=arr[i];
recode[temps]++;
}
// 取出数据,从桶里面取出数据
// 从 1 号桶开始遍历,判断桶里面是否数据 来把桶中的数据取出 因为是从小到大开始遍历取出数据所以 所以数据的顺序是按照从小到大的顺序去获取数据
int index=0;
for(int i=0;i<bucket.length;i++){
if(recode[i]!=0){
for(int k=0;k<recode[i];k++){ //疑点 为什么是 < 因为数据是从1 开始算的
temp[index]=bucket[i][k];
index++;
}
}
// 为了下一轮的后续使用 将记录数置为 0
recode[i]=0;
}
return temp;
}
}