Algoritmo de Ordenação Radix
Publicado por João Cristiano Monteiro da Silva (última atualização em 07/07/2011)
[ Hits: 6.990 ]
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); }
Desenhando uma curva Dragão ou o Fractal Jurassic Park
Método eficiente de armazenamento utilizando containers (Vector e Map)
Nenhum comentário foi encontrado.
Atualizar o macOS no Mac - Opencore Legacy Patcher
Crie alias para as tarefas que possuam longas linhas de comando - bash e zsh
Criando um gateway de internet com o Debian
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Aprenda a criar músicas com Inteligência Artificial usando Suno AI
Instalando Zoom Client no Fedora 40
Instalando Navegador Firefox no Debian 12
Bloqueando propagandas no Youtube e outros sites com o uBlocker Origin
Envio de link pelo whatsapp (1)
Pi Network.... alguém minera? (8)