1. public class radixSort {
    2. public static void main(String[] args) {
    3. // int[] arr={10,1,25,8,6,700};
    4. // radixSort(arr);
    5. // System.out.println(Arrays.toString(arr));
    6. int []arr = new int[50000000];
    7. for (int i = 0; i < 50000000; i++) {
    8. arr[i] = (int) (Math.random() * 8000000);
    9. }
    10. long start= System.currentTimeMillis();
    11. radixSort(arr);
    12. long end= System.currentTimeMillis();
    13. System.out.println("time="+(end-start));
    14. }
    15. public static void radixSort(int[] arr) {
    16. //求数的最大位数
    17. int max = arr[0];
    18. for (int i = 1; i < arr.length; i++) {
    19. if (arr[0] < arr[i]) {
    20. max = arr[i];
    21. }
    22. }
    23. int maxlength = (max + "").length();
    24. //定义一个二维数组
    25. int[][] bucket = new int[10][arr.length];
    26. //统计每个桶放了多少个数据
    27. int[] bucketElementCounts = new int[10];
    28. for (int i = 0, n = 1; i < maxlength; i++, n *= 10) {
    29. for (int j = 0; j < arr.length; j++) {
    30. //求对应位的值
    31. int element = arr[j] / n % 10;
    32. //放入到对应的几号数组中 可能有多位
    33. bucket[element][bucketElementCounts[element]] = arr[j];
    34. bucketElementCounts[element]++;
    35. }
    36. //遍历数组,将数据放回原数组中
    37. int index = 0;
    38. for (int k = 0; k < bucket.length; k++) {
    39. //数组不为空才进行遍历统计数组的个数
    40. if (bucketElementCounts[k] != 0) {
    41. for (int l = 0; l < bucketElementCounts[k]; l++) {
    42. arr[index++] = bucket[k][l];
    43. }
    44. }
    45. //处理之后需要清空统计数据
    46. bucketElementCounts[k] = 0;
    47. }
    48. }
    49. }
    50. }