import java.util.Arrays; /** * 基数排序 */ public class RadixSort { public static void main(String[] args) { int[] arr = {53, 3, 542, 748, 14, 214}; radisSort(arr); System.out.println(Arrays.toString(arr)); } public static void radisSort(int[] arr) { //创建一个二维数组,10*length,空间换时间排序 int[][] bucket = new int[10][arr.length]; // 记录每个桶数据的下标 int[] bucketIndex = new int[10]; //找到最大值 int max = arr[0]; for (int item : arr) { if (item > max) { max = item; } } //获取最大数的位数 int maxLength=(max+"").length(); for (int k = 0; k < maxLength; k++) { //按照个位放入 for (int i = 0; i < arr.length; i++) { // 取出每个元素的个位值 int digitOfElement = arr[i]/(10^i) % 10; bucket[digitOfElement][bucketIndex[digitOfElement]] = arr[i]; bucketIndex[digitOfElement]++; } // 取数据 int index = 0; for (int i = 0; i < bucketIndex.length; i++) { for (int j = 0; j < bucketIndex[i]; j++) { arr[index] = bucket[i][j]; index++; } bucketIndex[i] = 0; } } } }