基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

java实现
public class JiShu {public static void main(String[] args) {int[] a={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};System.out.println("排序之前:");for (int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}//基数排序sort(a);System.out.println();System.out.println("排序之后:");for (int i = 0; i < a.length; i++) {System.out.print(a[i]+" ");}}private static void sort(int[] array) {//找到最大数,确定要排序几趟int max = 0;for (int i = 0; i < array.length; i++) {if(max<array[i]){max = array[i];}}//判断位数int times = 0;while(max>0){max = max/10;times++;}//建立十个队列List<ArrayList> queue = new ArrayList<ArrayList>();for (int i = 0; i < 10; i++) {ArrayList queue1 = new ArrayList();queue.add(queue1);}//进行times次分配和收集for (int i = 0; i < times; i++) {//分配for (int j = 0; j < array.length; j++) {//每一次比较都把奇数相同的放在同一个队列中,Math.pow(a,b) a的b次方//如果i=2表示取第二位,那么就%100取余 然后/10取取除int x = array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);//直接去奇数位置寻找对应的列表ArrayList queue2 = queue.get(x);queue2.add(array[j]);queue.set(x,queue2);}//收集int count = 0;for (int j = 0; j < 10; j++) {while(queue.get(j).size()>0){ArrayList<Integer> queue3 = queue.get(j);array[count] = queue3.get(0);queue3.remove(0);count++;}}}}}
注:保证不能有负数
