#include<stdio.h>#include<stdlib.h>intget_digit(int num, int digit){
return (num / digit) % 10;
}
voidradix_sort(int arr[], int n, int max_digit){
int *count = malloc(sizeof(int) * 10), *temp = malloc(sizeof(int) * n);
for (int d = 1; d <= max_digit; d *= 10) {
for (int i = 0; i < 10; i++) count[i] = 0;
for (int i = 0; i < n; i++) count[get_digit(arr[i], d)]++;
for (int i = 1; i < 10; i++) count[i] += count[i - 1];
for (int i = n - 1; i >= 0; i--) temp[--count[get_digit(arr[i], d)]] = arr[i];
for (int i = 0; i < n; i++) arr[i] = temp[i];
}
free(count);
free(temp);
}
intmain(){
int arr[] = {34, 23, 69, 19, 777, 15, 198, 82, 33, 78, 190, 606};
int n = sizeof(arr) / sizeof(arr[0]);
int max_digit = 1000;
radix_sort(arr, n, max_digit);
printf("排序后的数组为\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return0;
}