Ordenación y particionado: sort y stable_partition
Ordene y particione contenedores con std::sort y std::stable_partition.
Ordenación y particionado: sort y stable_partition es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
std::sort
El algoritmo de ordenación principal. O(N log N) en promedio. Se ejecuta en el propio rango. No garantiza estabilidad.
#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
Pase un comparador (lambda o functor) para ordenar según otros criterios.
std::sort(v.begin(), v.end(),
[](int a, int b) { return a > b; }); // descendingOrdenar tipos personalizados
Proporcione un comparador que compare miembros específicos o defina operator< en el 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 que sort, pero conserva el orden relativo de los elementos iguales. Es ligeramente más lento (normalmente requiere memoria adicional O(N log^2 N)).
std::partial_sort
Coloca primero los k elementos más pequeños, ordenados. Los elementos restantes quedan en un orden no especificado. Es más rápido que una ordenación completa cuando solo necesita los k primeros.
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
Particiona el rango de modo que el elemento en la posición nth sea el que ocuparía en un rango completamente ordenado. Todo lo anterior es ≤ que el elemento nth; todo lo posterior es ≥. O(N) en promedio.
std::nth_element(v.begin(), v.begin() + 2, v.end());
// v[2] is the 3rd smallest elementstd::is_sorted
Comprueba si un rango ya está ordenado.
if (std::is_sorted(v.begin(), v.end())) {
std::cout << "already sorted";
}std::partition
Reordena un rango para que los elementos que cumplen un predicado queden primero. Devuelve el iterador al primer elemento que no lo cumple. No es estable.
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, pero conserva el orden relativo dentro de cada grupo.
Ordenar por varias claves
Use un comparador que compare la clave principal y, si son iguales, la secundaria.
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;
});Búsqueda binaria en rangos ordenados
Una vez ordenados, use std::lower_bound, std::upper_bound y std::binary_search para realizar búsquedas en O(log N).
Comprobación rápida
¿Qué algoritmo conserva el orden relativo de los elementos iguales después de ordenar?
Resumen
Use std::sort para la ordenación general, std::stable_sort cuando importe el orden de los elementos iguales, std::partial_sort para los k primeros, std::nth_element para seleccionar y std::partition/std::stable_partition para agrupar.
Preguntas frecuentes
¿La lección «Ordenación y particionado: sort y stable_partition» es gratis?
Sí — el texto completo de «Ordenación y particionado: sort y stable_partition» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Ordenación y particionado: sort y stable_partition»?
Ordene y particione contenedores con std::sort y std::stable_partition. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Ordenación y particionado: sort y stable_partition»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Algoritmos no modificadores: find, count y all_of
- Algoritmos modificadores: transform, copy_if y replace
- Ordenación y particionado: sort y stable_partition
- Algoritmos numéricos: accumulate, reduce y transform_reduce