#include <stdio.h>
#include <stdlib.h>
int encontrarMaximo(int vetor[], int tamanho) {
int maximo = vetor[0];
for (int i = 1; i < tamanho; i++) {
if (vetor[i] > maximo) {
maximo = vetor[i];
}
}
return maximo;
}
// Função auxiliar para calcular o número de dígitos de um número
int numeroDeDigitos(int numero) {
if (numero == 0) return 1;
int contador = 0;
while (numero != 0) {
numero /= 10;
contador++;
}
return contador;
}
// Função para obter o dígito na devida posição (0 para unidades, 1 para dezenas e assim vai)
int obterDigito(int numero, int posicao) {
for (int i = 0; i < posicao; i++) {
numero /= 10;
}
return numero % 10;
}
// Algoritmo auxiliar de ordenação: Bubble Sort modificado para ordenar baseado no dígito na posição 'posicao' (*BUBBLE SORT É ESTÁVEL!*)
void ordenacaoBolha(int vetor[], int tamanho, int posicao) {
for (int i = 0; i < tamanho - 1; i++) {
for (int j = 0; j < tamanho - i - 1; j++) {
if (obterDigito(vetor[j], posicao) > obterDigito(vetor[j + 1], posicao)) {
// Troca os elementos
int temporario = vetor[j];
vetor[j] = vetor[j + 1];
vetor[j + 1] = temporario;
}
}
}
}
void ordenacaoRadix(int vetor[], int tamanho) {
// Encontra o número de dígitos
int maximo = encontrarMaximo(vetor, tamanho);
int digitos = numeroDeDigitos(maximo);
// Ordena por cada dígito, começando pelas unidades (posição 0)
for (int posicao = 0; posicao < digitos; posicao++) {
ordenacaoBolha(vetor, tamanho, posicao);
}
}
void imprimirVetor(int vetor[], int tamanho) {
for (int i = 0; i < tamanho; i++) {
printf("%d ", vetor[i]);
}
printf("\n");
}
int main() {
int vetor[] = {170, 45, 75, 90, 802, 24, 2, 66};
int tamanho = sizeof(vetor) / sizeof(vetor[0]);
printf("Vetor original: ");
imprimirVetor(vetor, tamanho);
ordenacaoRadix(vetor, tamanho);
printf("Vetor ordenado: ");
imprimirVetor(vetor, tamanho);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBlbmNvbnRyYXJNYXhpbW8oaW50IHZldG9yW10sIGludCB0YW1hbmhvKSB7CiAgICBpbnQgbWF4aW1vID0gdmV0b3JbMF07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHRhbWFuaG87IGkrKykgewogICAgICAgIGlmICh2ZXRvcltpXSA+IG1heGltbykgewogICAgICAgICAgICBtYXhpbW8gPSB2ZXRvcltpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbWF4aW1vOwp9CgovLyBGdW7Dp8OjbyBhdXhpbGlhciBwYXJhIGNhbGN1bGFyIG8gbsO6bWVybyBkZSBkw61naXRvcyBkZSB1bSBuw7ptZXJvCmludCBudW1lcm9EZURpZ2l0b3MoaW50IG51bWVybykgewogICAgaWYgKG51bWVybyA9PSAwKSByZXR1cm4gMTsKICAgIGludCBjb250YWRvciA9IDA7CiAgICB3aGlsZSAobnVtZXJvICE9IDApIHsKICAgICAgICBudW1lcm8gLz0gMTA7CiAgICAgICAgY29udGFkb3IrKzsKICAgIH0KICAgIHJldHVybiBjb250YWRvcjsKfQoKLy8gRnVuw6fDo28gcGFyYSBvYnRlciBvIGTDrWdpdG8gbmEgZGV2aWRhIHBvc2nDp8OjbyAoMCBwYXJhIHVuaWRhZGVzLCAxIHBhcmEgZGV6ZW5hcyBlIGFzc2ltIHZhaSkKaW50IG9idGVyRGlnaXRvKGludCBudW1lcm8sIGludCBwb3NpY2FvKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2ljYW87IGkrKykgewogICAgICAgIG51bWVybyAvPSAxMDsKICAgIH0KICAgIHJldHVybiBudW1lcm8gJSAxMDsKfQoKLy8gQWxnb3JpdG1vIGF1eGlsaWFyIGRlIG9yZGVuYcOnw6NvOiBCdWJibGUgU29ydCBtb2RpZmljYWRvIHBhcmEgb3JkZW5hciBiYXNlYWRvIG5vIGTDrWdpdG8gbmEgcG9zacOnw6NvICdwb3NpY2FvJyAoKkJVQkJMRSBTT1JUIMOJIEVTVMOBVkVMISopCnZvaWQgb3JkZW5hY2FvQm9saGEoaW50IHZldG9yW10sIGludCB0YW1hbmhvLCBpbnQgcG9zaWNhbykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YW1hbmhvIC0gMTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0YW1hbmhvIC0gaSAtIDE7IGorKykgewogICAgICAgICAgICBpZiAob2J0ZXJEaWdpdG8odmV0b3Jbal0sIHBvc2ljYW8pID4gb2J0ZXJEaWdpdG8odmV0b3JbaiArIDFdLCBwb3NpY2FvKSkgewogICAgICAgICAgICAgICAgLy8gVHJvY2Egb3MgZWxlbWVudG9zCiAgICAgICAgICAgICAgICBpbnQgdGVtcG9yYXJpbyA9IHZldG9yW2pdOwogICAgICAgICAgICAgICAgdmV0b3Jbal0gPSB2ZXRvcltqICsgMV07CiAgICAgICAgICAgICAgICB2ZXRvcltqICsgMV0gPSB0ZW1wb3JhcmlvOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIG9yZGVuYWNhb1JhZGl4KGludCB2ZXRvcltdLCBpbnQgdGFtYW5obykgewogICAgLy8gRW5jb250cmEgbyBuw7ptZXJvIGRlIGTDrWdpdG9zCiAgICBpbnQgbWF4aW1vID0gZW5jb250cmFyTWF4aW1vKHZldG9yLCB0YW1hbmhvKTsKICAgIGludCBkaWdpdG9zID0gbnVtZXJvRGVEaWdpdG9zKG1heGltbyk7CiAgICAKICAgIC8vIE9yZGVuYSBwb3IgY2FkYSBkw61naXRvLCBjb21lw6dhbmRvIHBlbGFzIHVuaWRhZGVzIChwb3Npw6fDo28gMCkKICAgIGZvciAoaW50IHBvc2ljYW8gPSAwOyBwb3NpY2FvIDwgZGlnaXRvczsgcG9zaWNhbysrKSB7CiAgICAgICAgb3JkZW5hY2FvQm9saGEodmV0b3IsIHRhbWFuaG8sIHBvc2ljYW8pOwogICAgfQp9Cgp2b2lkIGltcHJpbWlyVmV0b3IoaW50IHZldG9yW10sIGludCB0YW1hbmhvKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhbWFuaG87IGkrKykgewogICAgICAgIHByaW50ZigiJWQgIiwgdmV0b3JbaV0pOwogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbigpIHsKICAgIGludCB2ZXRvcltdID0gezE3MCwgNDUsIDc1LCA5MCwgODAyLCAyNCwgMiwgNjZ9OwogICAgaW50IHRhbWFuaG8gPSBzaXplb2YodmV0b3IpIC8gc2l6ZW9mKHZldG9yWzBdKTsKICAgIAogICAgcHJpbnRmKCJWZXRvciBvcmlnaW5hbDogIik7CiAgICBpbXByaW1pclZldG9yKHZldG9yLCB0YW1hbmhvKTsKICAgIAogICAgb3JkZW5hY2FvUmFkaXgodmV0b3IsIHRhbWFuaG8pOwogICAgCiAgICBwcmludGYoIlZldG9yIG9yZGVuYWRvOiAiKTsKICAgIGltcHJpbWlyVmV0b3IodmV0b3IsIHRhbWFuaG8pOwogICAgCiAgICByZXR1cm4gMDsKfQ==