基数排序
-
思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。 这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。
-
图解:
-
代码实现:
import java.util.Arrays; /** * 基数排序 */ public class RadixSort { public static void main(String[] args) { int[] arr = {53, 3, 17, 234, 453, 222, 1456, 102, 10}; radixSort(arr); System.out.println(Arrays.toString(arr)); } public static void radixSort(int[] arr) { // 获取最大的数字 int maxValue = arr[0]; for (int i = 1; i < arr.length; i++) { maxValue = arr[i] > maxValue ? arr[i] : maxValue; } // 获取最大数的位数 int maxValueLength = (maxValue + "").length(); // 共循环 maxValueLength 次 for (int i = 0, n = 1; i < maxValueLength; i++, n *= 10) { int[][] bucket = new int[10][arr.length]; int[] bucketCount = new int[10]; // 将元素放入桶中 for (int j = 0; j < arr.length; j++) { bucket[arr[j] / n % 10][bucketCount[arr[j] / n % 10]++] = arr[j]; } // 将元素从桶中拷贝到数组中 int k = 0; for (int p = 0; p < 10; p++) { for (int q = 0; q < bucketCount[p]; q++) { arr[k++] = bucket[p][q]; } } } } }