0Pricing
C++ Academy · Aula

Ordenação e particionamento: sort, stable_partition

Ordene e particione contentores com std::sort e std::stable_partition

Ordenação e particionamento: sort, stable_partition é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.

std::sort

O principal algoritmo de ordenação. O(N log N) em média. No próprio intervalo. A estabilidade não é garantida.

#include <algorithm>
std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
std::sort(v.begin(), v.end());
// v is sorted ascending

Comparador personalizado

Forneça um comparador (lambda ou objeto função) para ordenar de acordo com outros critérios.

std::sort(v.begin(), v.end(),
    [](int a, int b) { return a > b; });   // descending

Ordenação de tipos personalizados

Forneça um comparador que compare membros específicos ou defina operator< para o tipo.

struct Person { std::string name; int age; };
std::vector<Person> people;
std::sort(people.begin(), people.end(),
    [](const Person& a, const Person& b) { return a.age < b.age; });

std::stable_sort

Igual a sort, mas preserva a ordem relativa dos elementos iguais. É um pouco mais lento (normalmente usa memória extra O(N log^2 N)).

std::partial_sort

Coloque os menores k elementos primeiro, já ordenados. Os elementos restantes ficam em uma ordem não especificada. É mais rápido que uma ordenação completa quando você precisa apenas dos k primeiros.

std::vector<int> v = {5, 2, 8, 1, 9, 3};
std::partial_sort(v.begin(), v.begin() + 3, v.end());
// first 3 elements are the smallest, sorted

std::nth_element

Faça uma partição para que o elemento na posição nth seja aquele que ocuparia essa posição em um intervalo totalmente ordenado. Tudo antes dele é ≤ que o elemento nessa posição; tudo depois é ≥. O(N) em média.

std::nth_element(v.begin(), v.begin() + 2, v.end());
// v[2] is the 3rd smallest element

std::is_sorted

Verifique se um intervalo já está ordenado.

if (std::is_sorted(v.begin(), v.end())) {
    std::cout << "already sorted";
}

std::partition

Reordene um intervalo para que os elementos que satisfazem um predicado fiquem primeiro. Retorna o iterador para o primeiro elemento que não o satisfaz. Não é estável.

std::vector<int> v = {1, 2, 3, 4, 5};
auto pivot = std::partition(v.begin(), v.end(),
    [](int x) { return x % 2 == 0; });
// even numbers come first, then odd

std::stable_partition

Como partition, mas preserva a ordem relativa dentro de cada grupo.

Ordenação por várias chaves

Use um comparador que compare a chave primária e, se elas forem iguais, a chave secundária.

std::sort(people.begin(), people.end(),
    [](const Person& a, const Person& b) {
        if (a.age != b.age) return a.age < b.age;
        return a.name < b.name;
    });

Busca binária em intervalos ordenados

Depois de ordenar, use std::lower_bound, std::upper_bound e std::binary_search para buscas O(log N).

Verificação rápida

Qual algoritmo preserva a ordem relativa dos elementos iguais após a ordenação?

Recapitulação

Use std::sort para ordenações gerais, std::stable_sort quando a ordem dos elementos iguais for importante, std::partial_sort para obter os k primeiros, std::nth_element para selecionar e std::partition/std::stable_partition para agrupar.

Perguntas Frequentes

A aula “Ordenação e particionamento: sort, stable_partition” é grátis?

Sim — o texto completo de “Ordenação e particionamento: sort, stable_partition” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.

O que vou aprender em “Ordenação e particionamento: sort, stable_partition”?

Ordene e particione contentores com std::sort e std::stable_partition Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C++ Academy?

Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Ordenação e particionamento: sort, stable_partition”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C++ Academy?

Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Algoritmos que não modificam: find, count, all_of
  2. Transformação e modificação: transform, copy_if, replace
  3. Ordenação e particionamento: sort, stable_partition
  4. Algoritmos numéricos: accumulate, reduce, transform_reduce
← Voltar para C++ Academy