#include <iostream>
using namespace std;
void printArray(int arr[], int len);
int findMax(int arr[], int len) {
int max = arr[0];
for (int i=1; i<len; ++i)
if (max < arr[i]) max = arr[i];
return max;
}
int calBitCount(int max) {
int count = 0;
for (; max/=10; ++count);
return count+1;
}
int getBitValue (int value, int bit) {
for (; bit>0; --bit)
value /= 10;
return value%10;
}
void radixSort(int arr[], int len) {
int max = findMax(arr, len);
int bitCount = calBitCount(max);
int radixCount = 10;
int *count = new int[radixCount]();
int *tempArray = new int[len]();
for (int b = 0; b < bitCount; ++b) {
for (int i=0; i<radixCount; ++i) count[i] = 0;
for (int i=0; i<len; ++i) tempArray[i] = 0;
for (int i = 0; i < len; ++i)
++count[getBitValue(arr[i], b)];
for (int c = 1; c < radixCount; ++c)
count[c] += count[c-1];
for (int i=len-1; i>=0; --i)
tempArray[--count[getBitValue(arr[i], b)]] = arr[i];
for (int i=0; i<len; ++i)
arr[i] = tempArray[i];
}
delete count;
delete tempArray;
}