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 ascendingComparador 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; }); // descendingOrdenaçã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, sortedstd::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 elementstd::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 oddstd::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
- Algoritmos que não modificam: find, count, all_of
- Transformação e modificação: transform, copy_if, replace
- Ordenação e particionamento: sort, stable_partition
- Algoritmos numéricos: accumulate, reduce, transform_reduce