Implementação de Algoritmos de Ordenação em Java

Este artigo aborda a implementação em Java de quatro algoritmos de ordenação clássicos: Bolha (Bubble Sort), Rápida (Quick Sort), Inserção (Insertion Sort) e Seleção (Selection Sort).

1. Ordenação por Bolha (Bubble Sort)

O algoritmo percorre repetidamente a lista, compara elementos adjacentes e os troca se estiverem na ordem errada. A cada passagem, o maior elemento "flutua" para o final, sendo excluído das iterações seguintes.

public static void bubbleSort(int[] dados) {
    int n = dados.length;
    for (int i = 0; i < n - 1; i++) {
        boolean trocou = false;
        for (int j = 0; j < n - i - 1; j++) {
            if (dados[j] > dados[j + 1]) {
                int aux = dados[j];
                dados[j] = dados[j + 1];
                dados[j + 1] = aux;
                trocou = true;
            }
        }
        if (!trocou) break; // Otimização: se não houve troca, já está ordenado
    }
}

2. Ordenação Rápida (Quick Sort)

Escolhe um elemento como pivô e particiona o aray em torno dele: elementos menores à esquerda e maiores ou iguais à direita. O processo é repetido recursivamente nas subpartes.

public static void quickSort(int[] arr, int inicio, int fim) {
    if (inicio >= fim) return;
    
    int i = inicio;
    int j = fim;
    int pivo = arr[(inicio + fim) / 2]; // Pivô central
    
    while (i <= j) {
        while (arr[i] < pivo) i++;
        while (arr[j] > pivo) j--;
        if (i <= j) {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            i++;
            j--;
        }
    }
    quickSort(arr, inicio, j);
    quickSort(arr, i, fim);
}

3. Ordenação por Inserção (Insertion Sort)

Constrói a sequência ordenada um elemento por vez, removendo e inserindo cada elemento na posição correta entre os já ordenados.

public static void insertionSort(int[] valores) {
    for (int i = 1; i < valores.length; i++) {
        int chave = valores[i];
        int j = i - 1;
        while (j >= 0 && valores[j] > chave) {
            valores[j + 1] = valores[j];
            j--;
        }
        valores[j + 1] = chave;
    }
}

4. Ordenação por Seleção (Selection Sort)

Divide o array em duas partes: ordenada e não ordenada. A cada iteração, seleciona o menor elemento da parte não ordenada e o troca com o primeiro elemento não ordenado.

public static void selectionSort(int[] lista) {
    for (int i = 0; i < lista.length - 1; i++) {
        int indiceMenor = i;
        for (int j = i + 1; j < lista.length; j++) {
            if (lista[j] < lista[indiceMenor]) {
                indiceMenor = j;
            }
        }
        int temporario = lista[i];
        lista[i] = lista[indiceMenor];
        lista[indiceMenor] = temporario;
    }
}

Tags: algoritmos de ordenação java bubble sort quick sort insertion sort

Publicado em 7-22 03:49