![]() |
|
||||
Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
Você está aqui: Java ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca) |
Como implementar a ordenação Quicksort em Java - Apostila de Java para iniciantesQuantidade de visualizações: 519 vezes |
|
A ordenação Quicksort é um dos algorítmos de ordenação mais encontrados em aplicações reais de programação. No Delphi esta ordenação é encontrada no objeto TList. No Java podemos encontrá-lo no método Arrays.sort(). Na linguagem C a ordenação Quicksort é implementada na função qsort() da biblioteca padrão. O algoritmo de ordenação Quicksort é do tipo dividir para conquistar (divide-and-conquer principle). Neste tipo de algoritmo o problema é dividido em sub-problemas e a solução é concatenada quando as chamadas recursivas atingirem o caso base. O vetor (ou array) a ser ordenado é dividido em duas sub-listas por um elemento chamado pivô, resultando em uma lista com elementos menores que o pivô e outra lista com os elementos maiores que o pivô. Esse processo é repetido para cada chamada recursiva. Sim, a ordenação Quicksort faz uso extensivo de recursividade, razão pela qual devemos ter muito cuidado para não estourar a pilha do sistema. Existem muitos estudos sobre o pivô ideal para a ordenação Quicksort. Nessa dica adotarei o último elemento do array ou sub-array como pivô. Em vetores não ordenados essa estratégia, em geral, resulta em uma boa escolha. Vamos ao código Java então? Veja um programa Java completo demonstrando o uso da ordenação Quicksort para um array de 10 elementos inteiros: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
package estudos;
import java.util.Scanner;
public class Estudos {
public static void main(String[] args) {
// vamos declarar um array de 10 elementos
int valores[] = new int[10];
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// vamos pedir ao usuário para informar os valores para o vetor
for(int i = 0; i < valores.length; i++){
System.out.print("Informe o valor do elemento " + i + ": ");
valores[i] = Integer.parseInt(entrada.nextLine());
}
// vamos mostrar o array informado
System.out.println("\nO array informado foi:\n");
for(int i = 0; i < valores.length; i++){
System.out.print(valores[i] + " ");
}
// vamos ordenar o vetor usando a ordenação Quicksort
quickSort(valores, 0, valores.length - 1);
System.out.println("\n\nO array ordenado é:\n");
for(int i = 0; i < valores.length; i++){
System.out.print(valores[i] + " ");
}
System.out.println("\n\n");
}
// função de implementação da ordenação Quicksort
public static void quickSort(int vetor[], int inicio, int fim) {
// o início é menor que o fim?
if (inicio < fim) {
// vamos obter o novo índice da partição
int indiceParticao = particionar(vetor, inicio, fim);
// efetuamos novas chamadas recursivas
quickSort(vetor, inicio, indiceParticao - 1);
quickSort(vetor, indiceParticao + 1, fim);
}
}
// função que retorna o índice de partição
private static int particionar(int vetor[], int inicio, int fim) {
// para guardar o pivô
int pivot = vetor[fim];
int i = (inicio - 1);
for (int j = inicio; j < fim; j++) {
if (vetor[j] <= pivot) {
i++;
// fazemos a troca
int temp = vetor[i];
vetor[i] = vetor[j];
vetor[j] = temp;
}
}
// efetua a troca
int temp = vetor[i + 1];
vetor[i + 1] = vetor[fim];
vetor[fim] = temp;
return i + 1;
}
}
Ao executar este código Java nós teremos o seguinte resultado: Informe o valor do elemento 0: 7 Informe o valor do elemento 1: 2 Informe o valor do elemento 2: 43 Informe o valor do elemento 3: 1 Informe o valor do elemento 4: 9 Informe o valor do elemento 5: 6 Informe o valor do elemento 6: 22 Informe o valor do elemento 7: 3 Informe o valor do elemento 8: 37 Informe o valor do elemento 9: 5 O array informado foi: 7 2 43 1 9 6 22 3 37 5 O array ordenado é: 1 2 3 5 6 7 9 22 37 43 |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
|
Delphi - Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em Delphi Java - Como converter Metros Quadrados em Quilômetros Quadrados em Java - Java para Física e Engenharia |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





