Método Quicksort em C e Java: Um guia completo

Última atualização: 6 de março de 2026
  • O Quicksort é um algoritmo de ordenação eficiente baseado na estratégia de dividir para conquistar, com desempenho médio de O(n log n) e pior caso de O(n^2).
  • Selecione um pivô e divida os elementos menores e maiores para ordenar por recursão; a escolha do pivô influencia o desempenho.
  • Implementável em C e Java; existem versões iterativas, não é estável e elementos repetidos podem degradar sua eficiência.
Método Quicksort

No mundo da programação, os algoritmos de ordenação desempenham um papel fundamental. Entre os algoritmos mais eficientes e amplamente utilizados está o Quicksort. Este algoritmo, conhecido por sua velocidade e eficiência na ordenação de elementos, pode ser implementado em diversas linguagens de programação, incluindo C e Java. Neste guia completo, exploraremos o Quicksort em C e Java em detalhes, analisando seu funcionamento, implementação e principais características. Junte-se a nós nesta fascinante jornada pelo algoritmo Quicksort e descubra como você pode aplicá-lo em seus próprios projetos de programação.

O que é o método Quicksort?

O Quicksort, também conhecido como ordenação rápida, é um algoritmo de ordenação eficiente que utiliza a técnica de dividir para conquistar. Foi desenvolvido pelo cientista da computação britânico Sir Tony Hoare em 1959 e, desde então, tornou-se um dos algoritmos de ordenação mais utilizados e estudados em programação.

O algoritmo Quicksort baseia-se no princípio de selecionar um elemento pivô da lista a ser ordenada e particionar os elementos restantes em dois grupos: aqueles que são menores ou iguais ao pivô e aqueles que são maiores que o pivô. Em seguida, o mesmo processo é aplicado recursivamente a cada um dos dois grupos gerados, até que todos os elementos estejam ordenados.

Método Quicksort em C

A linguagem de programação C é amplamente utilizada para implementar algoritmos devido à sua eficiência e ao baixo nível de controle que permite sobre o hardware. A seguir, apresentaremos uma implementação passo a passo do método Quicksort em C:

Etapa 1: Selecionando o pivô

Primeiro, um item de pivô deve ser selecionado na lista. Existem diferentes abordagens para escolher o pivô, mas uma abordagem comum é selecionar o primeiro item da lista.

Etapa 2: Particionamento

Uma vez selecionado o pivô, a lista deve ser particionada em dois grupos: elementos menores ou iguais ao pivô e elementos maiores que o pivô. Para fazer isso, um ponteiro para a esquerda e um ponteiro para a direita são usados ​​para mover em direção ao centro da lista até encontrar elementos que precisam ser trocados.

  Bucketsort: Classifique dados rapidamente

Etapa 3: Recursão

Após o particionamento ser executado, o mesmo processo é aplicado recursivamente a cada um dos dois grupos gerados. Ou seja, um novo pivô é selecionado em cada grupo e o particionamento é executado novamente até que todos os elementos sejam classificados.

Etapa 4: Combinação

Por fim, os grupos são combinados em um único arranjo ordenado. Neste ponto, todos os elementos menores ou iguais ao pivô estarão à esquerda dele, enquanto todos os elementos maiores que ele estarão à direita.

Abaixo está um exemplo de implementação do método Quicksort em C:

#include <stdio.h>

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int arr[], int low, int high) {
    int pivot = arr[low];
    int i = low + 1;
    int j = high;

    while (1) {
        while (arr[i] < pivot && i <= j)
            i++;

        while (arr[j] > pivot)
            j--;

        if (i >= j)
            break;

        swap(&arr[i], &arr[j]);
    }

    swap(&arr[low], &arr[j]);

    return j;
}

void quicksort(int arr[], int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high);
        quicksort(arr, low, pivot - 1);
        quicksort(arr, pivot + 1, high);
    }
}

int main() {
    int arr[] = {5, 2, 9, 1, 7, 6, 8, 3, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    quicksort(arr, 0, n - 1);

    printf("Arreglo ordenado: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    return 0;
}

Este código implementa o método Quicksort em C usando a técnica de recursão. Quando você executar o programa, a matriz de entrada será classificada e o resultado será impresso.

Método Quicksort em Java

Java é outra linguagem de programação amplamente utilizada que também é adequada para implementar o método Quicksort com eficiência. A seguir, mostraremos uma implementação passo a passo do método Quicksort em Java:

Etapa 1: Selecionando o pivô

Assim como na implementação em C, em Java também precisamos selecionar um elemento pivô da lista. Podemos escolher o primeiro elemento, o último elemento ou até mesmo um elemento aleatório como pivô.

Etapa 2: Particionamento

Uma vez selecionado o pivô, a lista deve ser particionada em dois grupos, assim como na implementação em C. Usaremos dois índices, um começando no começo da lista e outro no final, e os moveremos em direção ao centro até que encontrem elementos que precisam ser trocados.

  O método de busca de hash: um guia completo

Etapa 3: Recursão

Após o particionamento ser executado, o mesmo processo é aplicado recursivamente a cada um dos dois grupos gerados. Isso é feito chamando o método Quicksort novamente para cada grupo até que todos os elementos sejam classificados.

Etapa 4: Combinação

Por fim, os grupos são combinados em uma única matriz classificada, assim como na implementação C.

Abaixo está um exemplo de implementação do método Quicksort em Java:

public class Quicksort {
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static int partition(int[] arr, int low, int high) {
        int pivot = arr[low];
        int i = low + 1;
        int j = high;

        while (true) {
            while (i <= j && arr[i] < pivot)
                i++;

            while (arr[j] > pivot)
                j--;

            if (i >= j)
                break;

            swap(arr, i, j);
        }

        swap(arr, low, j);

        return j;
    }

    public static void quicksort(int[] arr, int low, int high) {
        if (low < high) {
            int pivot = partition(arr, low, high);
            quicksort(arr, low, pivot - 1);
            quicksort(arr, pivot + 1, high);
        }
    }

    public static void main(String[] args) {
        int[] arr = {5, 2, 9, 1, 7, 6, 8, 3, 4};
        int n = arr.length;

        quicksort(arr, 0, n - 1);

        System.out.print("Arreglo ordenado: ");
        for (int i = 0; i < n; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

Semelhante à implementação em C, este código implementa o método Quicksort em Java usando recursão. Quando você executar o programa, a matriz de entrada será classificada e o resultado será impresso.

Perguntas frequentes

1. Qual é a complexidade do método Quicksort? O método Quicksort tem uma complexidade média de O(n log n) no caso médio e O(n²) no pior caso, onde "n" é o tamanho do vetor a ser ordenado. No entanto, devido à sua eficiência e bom desempenho na maioria dos casos, o Quicksort continua sendo amplamente utilizado.

2. Como selecionar o melhor pivô no método Quicksort? A escolha do pivô pode afetar o desempenho do algoritmo. Uma estratégia comum é selecionar o elemento do meio do array como pivô para distribuir os elementos de forma mais uniforme. Outra opção é selecionar três elementos e usar a mediana deles como pivô.

3. Quando devo usar o Quicksort em vez de outros algoritmos de ordenação? O Quicksort é uma excelente escolha quando você deseja um algoritmo de ordenação eficiente e tem memória suficiente disponível. No entanto, se a memória for limitada ou se você precisar de um algoritmo estável (que preserve a ordem relativa de elementos idênticos), você pode considerar outros algoritmos, como o mergesort.

  Tudo sobre o Algoritmo de Shor: Função, Impacto e Desafios

4. O que acontece se o array a ser ordenado contiver elementos repetidos? O método Quicksort consegue lidar com arrays com elementos repetidos sem problemas. No entanto, no pior caso, quando todos os elementos são iguais, a divisão pode não ser justa, o que pode afetar o desempenho do algoritmo.

5. É possível implementar o método Quicksort iterativamente em vez de recursivamente? Sim, é possível implementar o método Quicksort iterativamente usando uma estrutura de dados chamada pilha. A versão recursiva é mais comumente usada, mas a versão iterativa pode ser preferível em certos casos em que se deseja evitar a sobrecarga da recursão.

6. O método Quicksort é estável? Não, o método Quicksort não é estável, o que significa que ele não preserva necessariamente a ordem relativa de elementos idênticos. Se um algoritmo estável for necessário, outras opções, como o mergesort, devem ser consideradas.

Conclusão

Em conclusão, o Quicksort é um algoritmo de ordenação eficiente e amplamente utilizado em programação. Ao longo deste guia, exploramos detalhadamente como ele funciona e como implementá-lo nas linguagens de programação C e Java. O Quicksort utiliza a técnica de dividir para conquistar, selecionando um pivô e particionando os elementos restantes em dois grupos. Através da recursão, os grupos são ordenados até que o array final ordenado seja obtido.

É importante observar os recursos e considerações do Quicksort, como seleção de pivô e tratamento de elementos repetidos. Além disso, outras opções de algoritmo de classificação devem ser avaliadas com base nas necessidades específicas do projeto.

Esperamos que este guia abrangente sobre o método Quicksort em C e Java tenha lhe dado uma compreensão sólida e inspirado você a aplicar este algoritmo eficiente em seus próprios projetos de programação!