#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;
}