编辑代码

#include <stdio.h>
#include <stdlib.h>

#define RADIX 10

void radix_sort(int *arr, int n) {
    int i, j, k;
    int count[RADIX];
    int *tmp = (int *) malloc(n * sizeof(int));
    if (!tmp) return;

    for (k = 1; k <= 1000; k *= RADIX) {
        for (i = 0; i < RADIX; i++) {
            count[i] = 0;
        }

        for (i = 0; i < n; i++) {
            j = (arr[i] / k) % RADIX;
            count[j]++;
        }

        for (i = 1; i < RADIX; i++) {
            count[i] += count[i - 1];
        }

        for (i = n - 1; i >= 0; i--) {
            j = (arr[i] / k) % RADIX;
            tmp[count[j] - 1] = arr[i];
            count[j]--;
        }

        for (i = 0; i < n; i++) {
            arr[i] = tmp[i];
        }
    }
    free(tmp);
}

int main() {
    int arr[] = {170, 45, 75, 90, 802, 24, 2, 66};
    int n = sizeof(arr) / sizeof(int);
    radix_sort(arr, n);
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}