基数排序算法思想:基数排序不需要进行元素的比较与交换
判断数据,从个位开始每位的比较,如果当前位相同,【例如百位数都是2】,则依照前一次比较的结果作为当前的结果
//总体思路就是将数据拆分为部分关键字进行排序
基数排序方法对任一子关键字排序时必须借助于另一种排序方法,而且这种排序方法必须是稳定的。
#是以计数排序作为基础的算法,而计数则是哈希或者打表的基本实现
看了很多很多资料,还有书,终于差不多啦
//0416补充代码
//各种数字简直····不能忍啊好恶心啊 啊 public static int[] radixSort(int[] A, int n) {
int[][] bucket=new int[10][n];//第一表示0-9 共10个桶,n表示每个桶中最多能有n个数 int[] counter=new int[10];//记录每个桶中元素的个数 int m=1;//表示当前计算的是哪一位,个十百千 1234 int a=0;//当前位置的数字 int power=1; int i=0,j=0; // int[] a={23,45,61,35,12,76,44}; while(m<=4) { for( i=0;i<n;i++) {//计算每一元素的当前m位上的数字 a=A[i]/power%10; // System.out.println(a); bucket[a][counter[a]++]=A[i]; //counter[a]-------相当于每一个桶的计数器 } /*for( i=0;i<10;i++) System.out.print(counter[i]+" "); System.out.println(); for(i=0;i<10;i++) { for(j=0;j<n;j++) { System.out.print(bucket[i][j]+" "); } System.out.println(); }*/ i=0; j=0; for(j=0;j<10;j++) { int k=0; while(k<counter[j]) A[i++]=bucket[j][k++]; counter[j]=0;
//方便下次使用啊!要不难道要新建?? } /*for( i=0;i<n;i++) System.out.println(i+" "+A[i]+" ");*/ m++; power=power*10; } return A; }