26template <
typename T>
void countingSortForRadix(std::vector<T>& arr,
int exp) {
27 int64_t n = arr.size();
28 std::vector<T> output(n);
29 std::vector<int> count(10, 0);
31 for (int64_t i = 0; i < n; i++) {
32 count[(arr[i] / exp) % 10]++;
35 for (int64_t i = 1; i < 10; i++) {
36 count[i] += count[i - 1];
39 for (int64_t i = n - 1; i >= 0; i--) {
40 output[count[(arr[i] / exp) % 10] - 1] = arr[i];
41 count[(arr[i] / exp) % 10]--;
59template <
typename T>
void radix_sort(std::vector<T>& arr) {
60 T maxElement = *max_element(arr.begin(), arr.end());
62 for (
int exp = 1; maxElement / exp > 0; exp *= 10) {
63 countingSortForRadix(arr, exp);