int exp = 1; // 1, 10, 100, 1000 ...
int radix = 10; // base 10 system
vector<int> aux(nums.size());
/* LSD Radix Sort */
while (maxVal / exp > 0) { // Go through all digits from LSD to MSD
vector<int> count(radix, 0);
for (int i = 0; i < nums.size(); i++) // Counting sort
count[(nums[i] / exp) % 10]++;
for (int i = 1; i < count.size(); i++) // you could also use partial_sum()
count[i] += count[i - 1];
for (int i = nums.size() - 1; i >= 0; i--)
aux[--count[(nums[i] / exp) % 10]] = nums[i];
for (int i = 0; i < nums.size(); i++)
nums[i] = aux[i];
exp *= 10;
}