编辑代码

#include <stdio.h>

int bit(int arr[], int len) {
    int max = arr[0];
    for (int i = 0; i < len; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    int d = 1;
    while (max > 0) {
        max = max / 10;
        if (max > 0) {
            d++;
        } else {
            break;
        }
    }
    return d;
}

void sort(int arr[], int len) {
    int d = bit(arr, len);
    
    int count[10] = {0};
    int o[len];
    int rad = 1;
    for (int i = 0; i < d; i++) {
        for (int j = 0; j < 10; j++) {
            count[j] = 0;
        }
        for (int j = 0; j < len; j++) {
            int k = (arr[j] / rad) % 10;
            count[k]++;
        }
        for (int j = 1; j < 10; j++) {
            count[j] += count[j - 1]; 
        }
        for (int j = len - 1; j >= 0; j--) {
            int k = (arr[j] / rad) % 10;
            o[count[k] - 1] = arr[j];
            count[k]--;
        }
        for (int j = 0; j < len; j++) {
            arr[j] = o[j];
        }
        rad = rad * 10;
    }
}

void print(int arr[], int len) {
    for (int i = 0; i < len; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {55, 45, 55, 56, 89, 42};
    int len = 6;
    sort(arr, len);
    print(arr, len);
    return 0;
}