#include<stdio.h>intgetMax(int arr[], int n){
int mx = arr[0];
for (int i = 1; i < n; i++)
if (arr[i] > mx)
mx = arr[i];
return mx;
}
intDigit(int num){
int k=0;
while(num!=0){
num/=10;
k++;
}
return k;
}
voidcountSort(int arr[], int n, intexp){
int output[n];
int i, count[10] = {0};
for (i = 0; i < n; i++)
count[ (arr[i]/exp)%10 ]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
for (i = n - 1; i >= 0; i--)
{
output[count[ (arr[i]/exp)%10 ] - 1] = arr[i];
count[ (arr[i]/exp)%10 ]--;
}
for (i = 0; i < n; i++)
arr[i] = output[i];
}
voidradixsort(int arr[], int n){
int max = getMax(arr, n);
int k=Digit(max);
intexp=1;
for (int i = 1; i< k; i++){
countSort(arr, n, exp);
exp*=10;
}
}
voidprintArray(int a[], int len){
for (int i = 0; i < len; i++) {
printf("%d ",a[i]);
}
}
intmain(){
int a[10] = {789,36,26,27,2,46,4,19,50,48};
int size=sizeof(a)/sizeof(int);
radixsort(a,size);
printArray(a,size);
return0;
}