#include "pch.h"
#include
using namespace std;
/* 尾递归 */
int find_max(int *a, int len) {
int max = a[0];
for (int i = 1; i < len; i++) {
if (a[i] > max) {
max = a[i];
}
}
return max;
}
int find_weishu(int max) {
int number = 0;
while (max != 0) {
max /= 10;
number += 1;
}
return number;
}
int kth_digit(int number, int kth) {
number /= pow(10, kth);
return number % 10;
}
void radix_sort(int *a, int len){
int *temp[10];
int count[10] = { 0,0,0,0,0,0,0,0,0,0 };
int max = find_max(a,len);
int max_digit = find_weishu(max);
int i, j, k;
for (i = 0; i < 10; i++) {
temp[i] = new int[len];
memset(temp[i], 0, sizeof(int)*len);
}
for (i = 0; i < max_digit; i++) {
memset(count, 0, sizeof(int)*10);
for (j = 0; j < len; j++) {
int xx = kth_digit(a[j], i);
temp[xx][count[xx]] = a[j];
count[xx]++;
}
int index = 0;
for (j = 0; j < 10; j++) {
for (k = 0; k < count[j]; k++) {
a[index++] = temp[j][k];
}
}
}
}
int main()
{
int a[6] = { 22,32,19,53,47,29 };
radix_sort(a, 6);
for (int i = 0; i < 6; i++) {
cout << a[i] << ' ';
}
return 0;
}