package com.example.sort.radix; import java.util.Arrays; public class RadixSort { public static void main(String[] args) { int[] arr = {421, 240, 115, 532, 305, 430, 124}; // 求最大数位数 int temp = arr[0]; for (int i = 1; i < arr.length; i++) { if (temp < arr[i]) { temp = arr[i]; } } int bit = String.valueOf(temp).length(); int[] result = sort(arr, bit); System.out.println(Arrays.toString(result)); } /** * 基数排序 * * @param arr */ private static int[] sort(int[] arr, int bit) { //创建临时存储数组 int[] result = new int[arr.length]; // 建立0-9容器 int[] count = new int[10]; for (int i = 0; i < bit; i++) { // 10的i次方 int division = (int) Math.pow(10, i); System.out.println(division); for (int j = 0; j < arr.length; j++) { int num = arr[j] / division % 10; System.out.println(num + ""); count[num]++; } // 计数排序的优化 for (int m = 1; m < count.length; m++) { count[m] = count[m] + count[m - 1]; } for (int n = arr.length - 1; n >= 0; n--) { int num = arr[n] / division % 10; result[--count[num]] = arr[n]; } // 一轮结束,替换原数组arr的位置 System.arraycopy(result, 0, arr, 0, arr.length); // 清空count数组 Arrays.fill(count, 0); } return result; } private static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } private static void print(int[] arr) { for (int i : arr) { System.out.print(i + " "); } } }