public class radixSort { public static void main(String[] args) {// int[] arr={10,1,25,8,6,700};// radixSort(arr);// System.out.println(Arrays.toString(arr)); int []arr = new int[50000000]; for (int i = 0; i < 50000000; i++) { arr[i] = (int) (Math.random() * 8000000); } long start= System.currentTimeMillis(); radixSort(arr); long end= System.currentTimeMillis(); System.out.println("time="+(end-start)); } public static void radixSort(int[] arr) { //求数的最大位数 int max = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[0] < arr[i]) { max = arr[i]; } } int maxlength = (max + "").length(); //定义一个二维数组 int[][] bucket = new int[10][arr.length]; //统计每个桶放了多少个数据 int[] bucketElementCounts = new int[10]; for (int i = 0, n = 1; i < maxlength; i++, n *= 10) { for (int j = 0; j < arr.length; j++) { //求对应位的值 int element = arr[j] / n % 10; //放入到对应的几号数组中 可能有多位 bucket[element][bucketElementCounts[element]] = arr[j]; bucketElementCounts[element]++; } //遍历数组,将数据放回原数组中 int index = 0; for (int k = 0; k < bucket.length; k++) { //数组不为空才进行遍历统计数组的个数 if (bucketElementCounts[k] != 0) { for (int l = 0; l < bucketElementCounts[k]; l++) { arr[index++] = bucket[k][l]; } } //处理之后需要清空统计数据 bucketElementCounts[k] = 0; } } }}