Em todos os códigos que eu vi, tem uma parte que realiza a soma da quantidade de números com o dígito referente com o seu anterior. Não consegui entender a lógica por trás disso. Por exemplo, aqui (comentei as linhas que estou em dúvida):
void radixsort(int vetor[], int tamanho) {
int i;
int b[tamanho];
int maior = vetor[0];
int exp = 1;
for (i = 0; i < tamanho; i++) {
if (vetor[i] > maior)
maior = vetor[i];
}
while (maior/exp > 0) {
int bucket[10] = { 0 };
for (i = 0; i < tamanho; i++)
bucket[(vetor[i] / exp) % 10]++; // Aqui eu sei que incrementa o vetor de cada dígito que foi encontrado
for (i = 1; i < 10; i++)
bucket[i] += bucket[i - 1]; // não entendi a razão disso
for (i = tamanho - 1; i >= 0; i--)
b[--bucket[(vetor[i] / exp) % 10]] = vetor[i]; // consequentemente não entendi aqui lol
for (i = 0; i < tamanho; i++)
vetor[i] = b[i];
exp *= 10;
}
}
Se alguém puder clarear a minha mente agradeço.
Valeu!