radix
This commit is contained in:
parent
8e3a77ccdd
commit
c9789e93c6
|
|
@ -16,16 +16,17 @@ class Principal {
|
|||
//algoritmo = new Bolha(n);
|
||||
//algoritmo = new Countingsort(n);
|
||||
//algoritmo = new Heapsort(n);
|
||||
algoritmo = new Insercao(n);
|
||||
//algoritmo = new Insercao(n);
|
||||
//algoritmo = new Mergesort(n);
|
||||
//algoritmo = new Quicksort(n);
|
||||
algoritmo = new Radixsort(n);
|
||||
//algoritmo = new Selecao(n);
|
||||
//algoritmo = new Shellsort(n);
|
||||
|
||||
|
||||
//Geracao do conjunto a ser ordenado
|
||||
//algoritmo.aleatorio();
|
||||
algoritmo.crescente();
|
||||
algoritmo.aleatorio();
|
||||
//algoritmo.crescente();
|
||||
//algoritmo.decrescente();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
/**
|
||||
* Metodo de ordenacao por contagem
|
||||
* @author Daniel Capanema
|
||||
* @version 1 04/2023
|
||||
*/
|
||||
|
||||
class Radixsort extends Geracao {
|
||||
|
||||
/**
|
||||
* Construtor.
|
||||
*/
|
||||
public Radixsort(){
|
||||
super();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Construtor.
|
||||
* @param int tamanho do array de numeros inteiros.
|
||||
*/
|
||||
public Radixsort(int tamanho){
|
||||
super(tamanho);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Algoritmo de ordenacao Countingsort.
|
||||
*/
|
||||
@Override
|
||||
public void sort() {
|
||||
int max = getMaior();
|
||||
for (int exp = 1; max/exp > 0; exp *= 10) {
|
||||
sort(exp);
|
||||
}
|
||||
}
|
||||
|
||||
public void sort(int exp) {
|
||||
int[] count = new int[10];
|
||||
int[] output = new int[n];
|
||||
|
||||
//Inicializar cada posicao do array de contagem
|
||||
for (int i = 0; i < 10; count[i] = 0, i++);
|
||||
|
||||
//Agora, o count[i] contem o numero de elemento iguais a i
|
||||
for (int i = 0; i < n; i++) {
|
||||
count[(array[i]/exp) % 10]++;
|
||||
}
|
||||
|
||||
//Agora, o count[i] contem o numero de elemento menores ou iguais a i
|
||||
for (int i = 1; i < 10; i++) {
|
||||
count[i] += count[i-1];
|
||||
}
|
||||
|
||||
//Ordenando
|
||||
for (int i = n-1; i >= 0; i--) {
|
||||
output[count[(array[i]/exp) % 10] - 1] = array[i];
|
||||
count[(array[i]/exp) % 10]--;
|
||||
}
|
||||
|
||||
//Copiando para o array original
|
||||
for (int i = 0; i < n; i++) {
|
||||
array[i] = output[i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Retorna o maior elemento do array.
|
||||
* @return maior elemento
|
||||
*/
|
||||
public int getMaior() {
|
||||
int maior = array[0];
|
||||
|
||||
for (int i = 1; i < n; i++) {
|
||||
if(maior < array[i]){
|
||||
maior = array[i];
|
||||
}
|
||||
}
|
||||
return maior;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue