83 lines
1.6 KiB
Java
83 lines
1.6 KiB
Java
/**
|
|
* 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;
|
|
}
|
|
}
|