#include <stdio.h>
int bit(int arr[], int len) {
int max = arr[0];
for (int i = 0; i < len; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
int d = 1;
while (max > 0) {
max = max / 10;
if (max > 0) {
d++;
} else {
break;
}
}
return d;
}
void sort(int arr[], int len) {
int d = bit(arr, len);
int count[10] = {0};
int o[len];
int rad = 1;
for (int i = 0; i < d; i++) {
for (int j = 0; j < 10; j++) {
count[j] = 0;
}
for (int j = 0; j < len; j++) {
int k = (arr[j] / rad) % 10;
count[k]++;
}
for (int j = 1; j < 10; j++) {
count[j] += count[j - 1];
}
for (int j = len - 1; j >= 0; j--) {
int k = (arr[j] / rad) % 10;
o[count[k] - 1] = arr[j];
count[k]--;
}
for (int j = 0; j < len; j++) {
arr[j] = o[j];
}
rad = rad * 10;
}
}
void print(int arr[], int len) {
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {55, 45, 55, 56, 89, 42};
int len = 6;
sort(arr, len);
print(arr, len);
return 0;
}