diff --git a/fonte/u05 Ordenação em memória principal/java/Principal.java b/fonte/u05 Ordenação em memória principal/java/Principal.java index 567b548..8815ec0 100644 --- a/fonte/u05 Ordenação em memória principal/java/Principal.java +++ b/fonte/u05 Ordenação em memória principal/java/Principal.java @@ -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(); diff --git a/fonte/u05 Ordenação em memória principal/java/Radixsort.java b/fonte/u05 Ordenação em memória principal/java/Radixsort.java new file mode 100644 index 0000000..e7d7b93 --- /dev/null +++ b/fonte/u05 Ordenação em memória principal/java/Radixsort.java @@ -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; + } +}