aeds2/fonte/u03 Ordenação em memória pr.../java/Radixsort.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;
}
}