实验代码:
package com.wllarl.suanfa.sort; import java.util.Arrays; //基数排序 public class RadixSort { public static void main(String[] args) { int[] arr = {53,3,542,748,14,214}; radixSort(arr); } public static void radixSort(int[] arr){ //寻找数组中的最大值 int max = arr[0]; for (int t = 1; t < arr.length-1; t++){ if (arr[t]>max){ max = arr[t]; } } int maxLength = (max + "").length();//计算循环的次数 //创建一个二维数组 int[][] buket = new int[10][arr.length];//其中一位数组表示10个桶,二维表示桶中存放的数据 int[] buketElement = new int[10];//表示每个桶存放元素的个数 for (int h = 0 ,n = 1; h < maxLength;h++,n *= 10){ //将元素放入桶中并记录每个桶中元素的个数 for (int i = 0; i < arr.length-1;i++){ int dataElement = arr[i] /n % 10;//将元素进行分桶,将其装入对应的桶中 buket[dataElement][buketElement[dataElement]] = arr[i]; buketElement[dataElement]++; } int index = 0; //变量桶中的数据 for (int j = 0; j < arr.length-1; j++){ if (buketElement[j] != 0){ for (int l = 0; l < buketElement[j]; l++){ arr[index++] = buket[j][l]; } } buketElement[j] = 0; } System.out.println("弟"+(h+1)+"轮的数据:"+Arrays.toString(arr)); } } }实验结果: “C:\Program Files\Java\jdk-9.0.4\bin\java.exe” “-javaagent:D:\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=8198:D:\IntelliJ IDEA 2019.3.3\bin” -Dfile.encoding=UTF-8 -classpath E:\daima\suanfa\out\production\算法练习 com.wllarl.suanfa.sort.RadixSort 弟1轮的数据:[542, 53, 3, 14, 14, 214] 弟2轮的数据:[3, 14, 14, 542, 14, 214] 弟3轮的数据:[3, 14, 14, 14, 14, 214] Process finished with exit code 0