public static void main(String[] args) { //定义整型数组 int[] a = {73,22,93,43,55,14,28,65,39,1,3,55}; //输出排序前的数组 for(int i : a) { System.out.print(i + " "); } System.out.println(); //调用基数排序函数 radixsort(a,5); /** * 注意这个地方必须要标注数据列中最大数的位数 * 这里的5表示的是序列里的数字长度最大值为5 */ //输出排序后的数组 for(int i : a) { System.out.print(i + " "); } } //a是要排序的数组,d是数组中最大的数的位数 public static void radixsort(int[] a, int d) { //count用来计数 int[] count = new int[a.length]; //bucket用来当桶 int[] bucket = new int[a.length]; //i表示第几位,1是个位,2是十位,。。。 for(int i=1;i<=d;i++) { for(int j=0;j<a.length;j++) { count[j] = 0; } //循环统计每个桶中的数据的数量 for(int j=0;j<a.length;j++) { count[getFigure(a[j],i)]++; } //利用count[j]来确定放置数据的位置 for(int j=1;j<a.length;j++) { count[j] = count[j] + count[j-1]; } //执行完此循环后的count[j]就是第j个桶右边界的位置 //利用循环把数据装入桶中,注意是从后往前 for(int j=a.length-1;j>=0;j--) { int k=getFigure(a[j],i); bucket[count[k] - 1] = a[j]; count[k]--; } //将桶中的数据取出,赋值给a for(int j=0,k=0;j<a.length;j++,k++) { a[j] = bucket[k]; } } } //此函数返回整型数j的第i位是什么 public static int getFigure(int j,int i) { int[] a = {1,10,100,1000,10000,100000}; return (j/a[i-1])%10; }