Saltar la navegación

7.- Algoritmos (I).

Caso práctico

Fotografía de Ada.
Ministerio de Educación (CC BY-NC)

Ada se acercó a preguntar a Ana. Ada era la jefa y Ana le tenía mucho respeto. Ada le preguntó cómo llevaba la tarea que le había encomendado María. Era una tarea importante, así que prestó mucha atención.

Ana le enseñó el código que estaba elaborando, le dijo que en un principio había pensado crear una clase llamada Pedido, para almacenar los datos del pedido, pero que Juan le recomendó usar mapas para almacenar los pares de valor y dato. Así que se decantó por usar mapas para ese caso. Le comentó también que para almacenar los artículos si había creado una pequeña clase llamada Articulo. Ada le dio el visto bueno:

—Pues Juan te ha recomendado de forma adecuada. Eso sí, sería recomendable que los artículos del pedido vayan ordenados por código de artículo —dijo Ada.

—¿Ordenar los artículos? Vaya, qué jaleo -respondió Ana.

—Arriba ese ánimo mujer, si has usado listas es muy fácil. 

Ada explicó a Ana cómo mantener los artículos de un pedido ordenados por código de artículo. Inmediatamento después trató de dar implementación.

Fotografía de una baraja de cartas desordena.
ITE. Ministerio de educación idITE=110292 (CC BY-NC)

La palabra algoritmo seguro que te suena, pero, ¿a qué se refiere en el contexto de las colecciones y de otras estructuras de datos? Las colecciones, los arrays e incluso las cadenas, tienen un conjunto de operaciones típicas asociadas que son habituales. Algunas de estas operaciones ya las hemos visto antes, pero otras no. Veamos para qué nos pueden servir estas operaciones:

  • Ordenar listas y arrays.
  • Desordenar listas y arrays.
  • Búsqueda binaria en listas y arrays.
  • Conversión de arrays a listas y de listas a array.
  • Partir cadenas y almacenar el resultado en un array.

Estos algoritmos están en su mayoría recogidos como métodos estáticos de las clases java.util.Collections y java.util.Arrays, salvo los referentes a cadenas obviamente.

Los algoritmos de ordenación ordenan los elementos en orden natural, siempre que Java sepa como ordenarlos. Como se explico en el apartado de conjuntos, cuando se desea que la ordenación siga un orden diferente, o simplemente los elementos no son ordenables de forma natural, hay que facilitar un mecanismo para que se pueda producir la ordenación. Los tipos "ordenables" de forma natural son los enteros, las cadenas (orden alfabético) y las fechas, y por defecto su orden es ascendente.

La clase Collections y la clase Arrays facilitan el método sort, que permiten ordenar respectivamente listas y arrays. Los siguientes ejemplos ordenarían los números de forma ascendente (de menor a mayor):

Ordenación natural en listas y arrays

Ejemplo de ordenación de un array de números

Integer[] array={10,9,99,3,5};

Arrays.sort(array);

Ejemplo de ordenación de una lista con números

ArrayList<Integer> lista=new ArrayList<Integer>();

lista.add(10); lista.add(9);lista.add(99);

lista.add(3); lista.add(5);

Collections.sort(lista);