#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int get_max(vector<int>& arr) {
int max_val = arr[0];
for (int i = 1; i < arr.size(); i++) {
max_val = max(max_val, arr[i]);
}
return max_val;
}
int get_digit(int num) {
int digit = 0;
while (num > 0) {
digit++;
num /= 10;
}
return digit;
}
void radix_sort(vector<int>& arr) {
int max_val = get_max(arr);
int max_digit = get_digit(max_val);
int base = 1;
vector<int> tmp(arr.size());
vector<int> count(10);
for (int i = 0; i < max_digit; i++) {
fill(count.begin(), count.end(), 0);
for (int j = 0; j < arr.size(); j++) {
int index = (arr[j] / base) % 10;
count[index]++;
}
for (int j = 1; j < 10; j++) {
count[j] += count[j - 1];
}
for (int j = arr.size() - 1; j >= 0; j--) {
int index = (arr[j] / base) % 10;
tmp[count[index] - 1] = arr[j];
count[index]--;
}
copy(tmp.begin(), tmp.end(), arr.begin());
base *= 10;
}
}
void print_array(vector<int>& arr) {
for (int i = 0; i < arr.size(); i++) {
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int a[] = {53, 3, 542, 748, 14, 214, 154, 63, 616};
vector<int> arr(a, a + 9);
cout << "原始数组:" << endl;
print_array(arr);
radix_sort(arr);
cout << "排序后的数组:" << endl;
print_array(arr);
return 0;
}