C++ Ordenación con sort

Enviado por jvilella el Vie, 21/02/2020 - 13:11

Requisitos:

En programación una de las operaciones más habituales es la de ordenar un a serie de elementos. Esta no es una operación sencilla, requiere recorrer todos los elementos de la serie comparándolos uno a uno. Para agilizar esta necesidad C++ propone una función que realiza esta operación (existen diversas manera de ordenar y C++ emplea un híbrido de varias de estas maneras). Para poder usarla debemos añadir al principio del código esta línea:

#include <algorithm>

Y luego usar la función sort con el siguiente formato

sort( <inicio_de_la_serie>, <final_de_la_serie>)

Supongamos que tenemos un vector llamado edades y queremos ordenarlo. Los vectores tienen una función begin y una función end que marcan el inicio y el fin de los elementos de la serie del vector (esto ya se ha visto anteriormente con las variables de tipo set), por tanto podemos ordenar el vector con la siguiente instrucción:

sort(edades.begin(), edades.end());

Ahora tendremos el vector edades ordenado de menor a mayor.

Ahora bien, ¿qué pasa si queremos una ordenación diferente? Por ejemplo podría darse el caso que quisiéramos ordenar las edades de mayor a menor. Existe un uso más avanzado de la función sort y es este:

sort( <inicio_de_la_serie>, <final_de_la_serie>, <funcion_de_comparacion> );

Como es evidente sort para poder ordenar va comparando elementos de dos en dos. La función de comparación es la que decide, para cada par de valores, cual de los dos debe ir primero en la ordenación. Esta función recibe dos valores y devuelve TRUE si el primero debe ir primero o FALSE si es el segundo el que debe ir primero. La siguiente función ordenaría en orden decreciente:

bool miComparacion(int num1, int num2) {
  if (num1 < num2) {
    return false;
  } else {
     return true;
  }
}

Y la usaríamos con sort de la siguiente manera para ordenar las edades de mayor a menor:

sort(edades.begin(), edades.end(), miComparacion);

 

Printer Friendly, PDF & Email

Etiquetas

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.