Métodos de ordenação Bubble sort: O método de ordenação por bubble sort ou conhecido como bolha consiste em compara dados armazenados em um vetor de tamanho qualquer, comparando cada elemento de uma posição com o próximo elemento do vetor. A ordenação pode ser crescente ou decrescente basta trocar a ordem de comparação. Um laço com a quantidade de elementos do vetor será executado (for(j=1;j<=n;j++)), e dentro deste, outro laço que percorre da primeira à penúltima posição do (for(i=0;i<n 1;i++)). Diagrama:
Exemplo implementação em java: import java.util.scanner; public class BubbleSort {
public static void main(string[] args) { Scanner in = new Scanner(System.in); int x[] = new int[5]; int n, i, aux; for (i = 0; i <= 4; i++) { System.out.print("Digite o " + (i + 1) + " número: "); x[i] = in.nextint(); for (n = 1; n <= 5; n++) { for (i = 0; i <= 3; i++) { if (x[i] > x[i + 1]) { aux = x[i]; x[i] = x[i + 1]; x[i + 1] = aux; for (i = 0; i <= 4; i++) { System.out.println((i + 1) + " número: " + x[i]);
Insertion sort Este método de ordenação por inserção se baseia na comparação do segundo número inserido no vetor, os elementos são ordenados de forma crescente ou decrescente dependendo da forma que o algoritmo é implementado. Um laço com as comparações será executado do segundo elemento ao último, na quantidade de vezes igual ao número de elementos do vetor menos um (for(i=1;i<n;i++)), enquanto existirem elementos à esquerda do número e a posição que atende a ordenação não for encontrada, o laço será executado.
Implementação em java:
import java.util.scanner; public class InsertionSort { public static void main(string[] args) { Scanner in = new Scanner(System.in); int x[] = new int[5]; int i, j, eleito; for (i = 0; i <= 4; i++) { System.out.print("Digite o " + (i + 1) + " número: "); x[i] = in.nextint(); for (i = 1; i <= 4; i++) { eleito = x[i]; j = i - 1; while (j >= 0 && x[j] > eleito) { x[j + 1] = x[j]; j = j - 1;
x[j + 1] = eleito; for (i = 0; i <= 4; i++) { System.out.println((i + 1) + " número: " + x[i]); Selection sort: Já neste método cada número do vetor, a partir do primeiro, é eleito e comparado com o menor ou maior, dependendo da ordenação desejada, número dentre os que estão à direita do eleito. Procura-se um número menor (quando crescente) ou um maior (quando decrescente). O número eleito está na posição i. Os números à direita estão nas posições de i+1 a n 1, sendo n o número de elementos do vetor. O laço a ser executado para encontrar o menor elemento à direita do eleito será (for(j=i+2;j<=n 1;j++)).
Implementação em java: import java.util.scanner; public class SelectionSort { public static void main(string[] args) { Scanner in = new Scanner(System.in); int x[] = new int[5]; int i, j, eleito, menor, pos; for (i = 0; i <= 4; i++) { System.out.print("Digite o " + (i + 1) + " número: "); x[i] = in.nextint(); for (i = 0; i <= 3; i++) { eleito = x[i]; menor = x[i + 1]; pos = i + 1; for (j = i + 2; j <= 4; j++) { if (x[j] < menor) {
menor = x[j]; pos = j; if (menor < eleito) { x[i] = x[pos]; x[pos] = eleito; for (i = 0; i <= 4; i++) { System.out.println((i + 1) + " número: " + x[i]); Merge sort: O vetor é dividido em vetores com a metade do tamanho do original por um procedimento recursivo, até que o vetor fique com apenas um elemento e estes sejam ordenados e intercalados. É aplicada a técnica da divisão e conquista. Dividir : dividir a sequência de n em duas subsequências de n/2 elementos cada. Conquistar: ordenar as duas subsequências recursivamente utilizando a ordenação por intercalação. Combinar: intercalar as duas subsequências ordenadas para produzir a solução.
Implementação em java: import java.util.scanner; public class MergeSort { public static void merge(int x[], int inicio, int fim) { int meio; if (inicio < fim) { meio = (inicio + fim) / 2; merge(x, inicio, meio); merge(x, meio + 1, fim); intercala(x, inicio, fim, meio);
public static void intercala(int x[], int inicio, int fim, int meio) { int poslivre = inicio, iniciovetor1 = inicio, iniciovetor2 = meio + 1, i; int aux[] = new int[5]; while (iniciovetor1 <= meio && iniciovetor2 <= fim) { if (x[iniciovetor1] <= x[iniciovetor2]) { aux[poslivre] = x[iniciovetor1]; iniciovetor1++; else { aux[poslivre] = x[iniciovetor2]; iniciovetor2++; poslivre++; for (i = iniciovetor1; i <= meio; i++) { aux[poslivre] = x[i]; poslivre++; for (i = iniciovetor2; i <= fim; i++) { aux[poslivre] = x[i]; poslivre++; for (i = inicio; i <= fim; i++) {
x[i] = aux[i]; public static void main(string[] args) { Scanner in = new Scanner(System.in); int x[] = new int[5]; int i; for (i = 0; i <= 4; i++) { System.out.print("Digite o " + (i + 1) + " número: "); x[i] = in.nextint(); merge(x, 0, 4); for (i = 0; i <= 4; i++) { System.out.println((i + 1) + " número: " + x[i]);
Quick Sort: O vetor é particionado por meio de um procedimento recursivo até que o vetor fique com apenas um elemento, enquanto os demais ficam ordenados à medida que ocorre o particionamento. A técnica é baseada na divisão e conquista, descrita a seguir: Dividir: o vetor X[p..r] é particionado em dois subvetores não vazios X[p..q] e X[q+1..r], tais que cada elemento de X[p..q] é menor ou igual a cada elemento de X[q+1..r]. Para determinar o índice q, escolhe-se o elemento que se encontra na metade do vetor original, chamado de pivô, e rearranjam-se os elementos do vetor de forma que os da esquerda de q são menores (ou iguais) e os da direita são maiores (ou iguais) ao pivô. Conquistar: os dois subvetores são ordenados X[p..q] e X[q+1..r] por chamadas recursivas ao QUICK SORT. Combinar: os elementos vão sendo ordenados no próprio vetor, sem processamento nesta etapa.
Fontes: manfred.com.br. Estrutura de dados II, disponível em: <http://manfred.com.br/index.php/bsi/estrutura-de-dados-ii> acesso em: 26/11/2014