基数排序即分配排序,以低位优先(LSD)为例,
1,先取出待排数的个位数(0-9),
2,将其放到对应标号为0-9的桶(每个桶中数都是线性对列)中,
3,再取十位,百位,千位,重复2步骤
进行一次分配后,从桶中取数据数,需按顺序取,至多分配n次(n为最大数的位数)
二、
import java.util.ArrayList; class radixSort { public static void radixSort(int[] a){ //从最大的数max分析出需要分配time次 int max=a[0],time=0; for(int i=1;i<a.length;i++){ if(a[i]>max){ max=a[i]; } } while(max>0){ max=max/10; time++; } //构造标号为0-9的桶子 ArrayList[] assign=new ArrayList[10]; for(int i=0;i<10;i++){ assign[i]=new ArrayList<Integer>(); } //开始分配 int bitNum=0; for(int i=0;i<time;i++){ //第i次分配 for(int j=0;j<a.length;j++){ bitNum=(a[j]/(int)Math.pow(10, i))%10; assign[bitNum].add(bitNum); } //从桶子中按序拿出数据 int k=0; ArrayList temp; for(int m=0;m<10;m++){ temp=assign[m]; for(int n=0;n<temp.size();n++){ a[k++]=(int)temp.get(n); } } } } public static void main(String args[]){ int[] a={4,3,6,1,2,5,2,2,2,2,0,0,3,1,9,9,9}; radixSort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }