0Pricing
C++ Academy · Lección

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 ascending

Comparador 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; });   // descending

Ordenar 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, sorted

std::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 element

std::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 odd

std::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

  1. Algoritmos no modificadores: find, count y all_of
  2. Algoritmos modificadores: transform, copy_if y replace
  3. Ordenación y particionado: sort y stable_partition
  4. Algoritmos numéricos: accumulate, reduce y transform_reduce
← Volver a C++ Academy