> 文档中心 > 基数排序的代码实现(LSD的基数排序[最低位优先,适用于位数小的数列],java语言)

基数排序的代码实现(LSD的基数排序[最低位优先,适用于位数小的数列],java语言)


思想(来自百度百科)

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

实现代码

import java.util.ArrayList;import java.util.LinkedList;import java.util.Queue;/ * className:Sort * * @author:zjl * @version:0.1 * @date:2020/8/1820:09 * @since:jdk1.8 */public class Sort {    //测试    public static void main(String[] args) { int R[] = {159, 36, 999, 564, 852, 4444, 695, 3}; int[] ints = radixSort(R); for (int i = 0; i < ints.length; i++) {     System.out.print(R[i] + "  "); }    }    public static int[] radixSort(int[] R) { //获取数组R中最大数的位数 int maxDigit = getDigit(R); //利用队列先进先出的特性 模拟桶 Queue<Integer> bucket0 = new LinkedList<>(); Queue<Integer> bucket1 = new LinkedList<>(); Queue<Integer> bucket2 = new LinkedList<>(); Queue<Integer> bucket3 = new LinkedList<>(); Queue<Integer> bucket4 = new LinkedList<>(); Queue<Integer> bucket5 = new LinkedList<>(); Queue<Integer> bucket6 = new LinkedList<>(); Queue<Integer> bucket7 = new LinkedList<>(); Queue<Integer> bucket8 = new LinkedList<>(); Queue<Integer> bucket9 = new LinkedList<>(); for (int j = 0; j < maxDigit; j++) {  //共需要进行maxDigit次进桶出桶操作     for (int i = 0; i < R.length; i++) {  int k;  String s = String.valueOf(R[i]);  char[] chars = s.toCharArray();  if (chars.length - j - 1 < 0)  //如果R[i]该位上没有数字      k = 0; //相当于高位补0操作  else      k = Integer.parseInt(String.valueOf(chars[chars.length - j - 1]));//将R[i]该位上的树字赋值给k//  System.out.println(k + "->" + R[i]);  switch (k) { //根据k的值将R[i]放入相应桶中      case 0:   bucket0.offer(R[i]);   break;      case 1:   bucket1.offer(R[i]);   break;      case 2:   bucket2.offer(R[i]);   break;      case 3:   bucket3.offer(R[i]);   break;      case 4:   bucket4.offer(R[i]);   break;      case 5:   bucket5.offer(R[i]);   break;      case 6:   bucket6.offer(R[i]);   break;      case 7:   bucket7.offer(R[i]);   break;      case 8:   bucket8.offer(R[i]);   break;      case 9:   bucket9.offer(R[i]);   break;  }     }     //从0号桶——>9h号桶依次出桶(先进先出)     int index = -1;     while (!bucket0.isEmpty()) {  index++;  R[index] = bucket0.poll();     }     while (!bucket1.isEmpty()) {  index++;  R[index] = bucket1.poll();     }     while (!bucket2.isEmpty()) {  index++;  R[index] = bucket2.poll();     }     while (!bucket3.isEmpty()) {  index++;  R[index] = bucket3.poll();     }     while (!bucket4.isEmpty()) {  index++;  R[index] = bucket4.poll();     }     while (!bucket5.isEmpty()) {  index++;  R[index] = bucket5.poll();     }     while (!bucket6.isEmpty()) {  index++;  R[index] = bucket6.poll();     }     while (!bucket7.isEmpty()) {  index++;  R[index] = bucket7.poll();     }     while (!bucket8.isEmpty()) {  index++;  R[index] = bucket8.poll();     }     while (!bucket9.isEmpty()) {  index++;  R[index] = bucket9.poll();     } } return R;    }    //获取一个数组最大的数字的最高位数    public static int getDigit(int R[]) { int maxDigit = 0; for (int i = 0; i < R.length; i++) {     int length = String.valueOf(R[i]).length();     if (length > maxDigit)  maxDigit = length; } return maxDigit;    }}

测试结果

在这里插入图片描述

老江饲料商城