package Sort;
public class JiShu {
public static void main(String[] args) {
int arr[]={21,24,57,62,6523,36,1,89,245};
JiShuSort(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void JiShuSort(int[] arr){
//先找出数组中最大的元素,并找到它的位数
int max=0;
for(int i:arr){
if(max<i){
max=i;
}
}
//System.out.println("max="+max);
//获取max的位数,通过转化为字符串,然后求长度,再把长度赋值给num;
int num=(max+"").length();
//System.out.println("num="+num);
int[] binNum=new int[10];//binNum这个数组用来存放每个桶的元素个数
int[][] bin=new int[10][arr.length];//每个一维数组表示一个桶。
//最外层遍历表示对哪一位进行遍历,最大数有几位就循环几次
for(int i=0,n=1;i<num;i++,n*=10){
//这层循环表示对待排序数组arr遍历,根据它相应位数的值放入相应的桶中
for(int j=0;j<arr.length;j++){
//除以10的n次方就是删除数据后n位。
//对10取余就是得到最后一位
int value=arr[j]/n%10;
//System.out.println("arr["+j+"]"+" value="+value);
bin[value][binNum[value]++]=arr[j];
}
/* for(int z=0;z<binNum.length;z++){
System.out.println(binNum[z]);
}*/
//这里是从0号桶到9号桶,依次往外拿数据,同时将表示桶中元素的标识数组binNum清零
for(int j=0,index=0;j<10;j++){
for(int binN=0;binN<binNum[j];binN++){
arr[index++]=bin[j][binN];
}
binNum[j]=0;
}
}
}
}
java学习笔记(数据结构与算法6)排序专题-基数排序。用空间换取时间的超快排序。java代码加注释。
最新推荐文章于 2024-06-11 19:36:10 发布