思想:从低位到高位进行计数排序

    基于计数排序(稳定的!)
    时间复杂度 O(d*(n + k))其中`d = log`````
    k就是基数的含义

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. int n = sc.nextInt();
    6. int[] a = new int[n];
    7. for (int i = 0; i < n; i++) {
    8. a[i] = sc.nextInt();
    9. }
    10. for (int i = 0; i <= 30; i++) {
    11. int[] b = new int[n], c = new int[2];
    12. for (int j = 0; j < n; j++) {
    13. int bit = a[j] >> i & 1;
    14. c[bit]++;
    15. }
    16. c[1] += c[0];
    17. for (int j = n - 1; j >= 0; j--) {
    18. int bit = a[j] >> i & 1;
    19. b[c[bit] - 1] = a[j];
    20. c[bit]--;
    21. }
    22. a = b;
    23. }
    24. for (int i = 0; i < n; i++) {
    25. System.out.print(a[i] + " ");
    26. }
    27. }
    28. }

    本代码基数为二进制