#include <iostream>
using namespace std;
int findMax(int arr[],int len){
int max = arr[0];
for (int i=0;i<len;i++){
if(arr[i]>max){
max=arr[i];
}
}
return max;
}
int calBitCount(int max){
int bit=0;
while(!max){
max /= 10;
bit++;
}
return bit;
}
int getBitValue(int value,int bit){
for(int i=0;i<bit;++i){
value /= 10;
}
return value%10;
}
void radixSort(int arr[],int len){
int max = findMax(arr,len);
int bitCount = calBitCount(max);
int radixCount = 10;
int* tempArray = new int[len]();
int* count = new int[radixCount]();
for (int b=0;b<bitCount;++b){
for (int k = 0;k<len;++k){
arr[k]=0;
}
for (int i = 0;i<len;++i){
int bitValue = getBitValue(arr[i],b);
++count[bitValue];
}
for (int c = 1;c<radixCount;++c){
count[c] += count[c-1];
}
for (int i=len-1;i>=0;--i){
int bitValue = getBitValue(arr[i],b);
tempArray[count[bitValue]]=arr[i];
}
for (int i=0;i<len;++i){
arr[i]=tempArray[i];
}
}
}
void printArray(int arr[], int len) {
for (int i = 0;i<len;++i){
cout << arr[i] << " ";
}
cout << endl;
}
int main(){
int arr[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48,};
int len = sizeof(arr)/sizeof(int);
printArray(arr,len);
radixSort(arr, len);
printArray(arr,len);
}