Algoritmo de Ordenação Radix
Publicado por João Cristiano Monteiro da Silva (última atualização em 07/07/2011)
[ Hits: 7.411 ]
Essa classe implementa um paradigma de ordenação usado originalmente para ordenação de cartões perfurados, onde os valores são empilhados dinamicamente.
Em suma, esse método agrupa os elementos levando em consideração um conjunto de combinações, levando em consideração o valor específico de cada algarismo.
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vector>
using namespace std;
class Radix{
private:
int *vetor;
int n;
public:
Radix(int size){
this->vetor = new int[size];
this->n = size;
memset(vetor, 0, size*sizeof(vetor));
}
Radix(int *origem, int size){
this->n = size;
vetor = origem;
}
int *getVetor(){
return(this->vetor);
}
int getVetorSize(){
return(this->n);
}
void ordenacaoRadix(){
vector<int> pilha[10];
int iCont = 0;
int max = getDigInteiros(getMaxValue());
int alg = 1;
do {
for(int i = 0; i < 10 && !iCont; i++)
pilha[i].clear();
pilha[getAlgRangeInt(vetor[iCont], alg)].push_back(vetor[iCont]);
iCont++;
if(iCont >= this->n){
iCont = 0;
for(int i = 0; i < 10; i++){
for(int j = 0; j < pilha[i].size(); j++){
vetor[iCont++] = pilha[i][j];
}
}
iCont = 0;
alg++;
}
} while(pilha[0].size() != this->n || (max+1) >= alg);
}
private:
int getMaxValue(){
int maior = 0;
for(int i = 1; i < this->n; i++){
if(*(vetor + i) > *(vetor + maior)){
maior = i;
}
}
return(*(vetor + maior));
}
int getAlgRangeInt(int valor, int algarismo){
unsigned quociente, divisor;
quociente = (int) pow(10, algarismo);
divisor = (int) pow(10, algarismo - 1);
return ((valor % quociente) / divisor);
}
int getDigInteiros(int valor){
if(valor<10) return 1;
return(1 + getDigInteiros(valor / 10));
}
};
int main(int argc, char **argv){
int vetor[] = {20, 10, 2348, 22, 2, 50, 80, 5};
Radix radix(vetor, 8);
radix.ordenacaoRadix();
int *retorno = radix.getVetor();
for(int i = 0; i < 8; i++){
cout << (i + 1) << ": " << *(retorno + i) << endl;
}
return(EXIT_SUCCESS);
}
Lista duplamente encadeada com cabecalho
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Scripts ou binários [RESOLVIDO] (3)
VOL já não é mais como antes? (10)
Pergunta: Meu teclado não está respondendo direito como e consertar? ... (4)









