[música] Hola, en esta ocasión revisaremos algunos algoritmos de ordenamiento, para esto seguiremos el siguiente plan de temas, primero revisaremos por qué es útil ordenar, luego revisaremos los algoritmos de selección, burbuja e inserción y finalmente revisaremos un caso de estudio donde podamos aplicar esos algoritmos. Empecemos identificando por qué es sutil ordenar. Por una parte, como habíamos dicho en el modelo anterior, es útil para facilitar los procesos de búsqueda, también es útil para definir algunos conceptos que solo tienen sentido cuando los elementos están ordenados, por ejemplo, la mediana solo tiene sentido si los elementos se encuentran ordenados de menor a mayor o de mayor a menor. También es útil cuando queremos presentar a nuestro usuario la información de manera ordenada, esto puede facilitar su lectura o su revisión. Sabiendo esto, veamos nuestro primer algoritmo de ordenamiento, el algoritmo de selección, primero definiremos una parte ordenada, como segundo paso buscaremos en el elemento menor o mayor, dependiendo de en qué forma estemos ordenando, de la parte desordenada, el tercer paso será intercambiar este elemento con el primero de la parte desordenada, y luego repetiremos hasta que logremos tener todos los elementos ordenados. Veamos esto en un diagrama. Para esto supongamos que queremos ordenar las pizzas que sabe preparar un cocinero según su precio de producción, de menor a mayor, este es el arreglo original de pizzas. Entonces, nuestro primer paso es definir una parte ordenada, al iniciar aún no hemos ordenado nada, entonces la parte ordenada será vacía, el siguiente paso es buscar el menor dentro de la parte desordenada, para nuestro ejemplo será la pizza que cuesta $21.000. El tercer paso es intercambiar ese menor con el primero de la parte desordenada, es decir, debemos intercambiar la pizza de $21.000 con la pizza de $58.000, como hemos pasado del menor al principio ya tenemos una parte ordenada, la cual está compuesta solo por la pizza de $21.000. Como último paso, debemos repetir el proceso hasta que todos los elementos estén ordenados. Es decir, buscamos el menor, que en este caso es $24.000, y lo pasamos al principio. Continuamos buscando el menor, que en este caso es $54.000, y lo pasamos al principio, nuevamente buscamos el menor de la parte desordenada, el cual es $55.000, y lo pasamos al principio. Luego buscamos el menor de la parte desordenada, en este caso es $57.000, y lo intercambiamos con el primero de la parte desordenada que es $58.000. Continuamos buscando el menor, ahora el $58.000, lo debemos intercambiar con el primero de la parte desordenada, o sea, $87.000. Nuevamente buscamos el menor, en este caso es $75.000, lo pasaremos al principio, intercambiándolo con $81.000, nuevamente buscamos el menor, en este caso resulta que es $81.000, y aunque ya está ordenado, igual debemos hacer el intercambio y debemos realizar el paso. Finalmente nuevamente buscamos el menor, en ese caso es $87.000, y lo ponemos al principio, en este momento ya podemos decir que todos los elementos en nuestro arreglo se encuentran ordenados. Veamos cómo transformar este algoritmo de selección en código Java, para eso traigamos la declaración de la clase Cocinero, donde teníamos un arreglo de pizzas, y construyamos el método ordenarPizzasPorPrecio. Lo primero que haremos es buscar el menor elemento de la parte desordenada, suponiendo que hay al menos un elemento, para eso traeremos el algoritmo que habíamos construido en el módulo anterior. Iniciaremos diciendo que el menor elemento, o la pizza de menor precio, es la pizza de la posición cero, recorreremos todas las demás pizzas y miraremos si alguna de ellas tiene un precio menor al de la pizza que hemos declarado como menor, en caso de que sea así, actualizaremos el menor para que sea la pizza que estamos revisando en este momento. Ahora debemos intercambiar la pizza de menor precio con la pizza que se encuentra en la primera posición de la parte desordenada, esto quiere decir que pasaremos la pizza de la posición cero a donde se encontraba el menor, que es posición menor, y pasaremos la pizza de menor precio a la posición cero. Ahora debemos repetir esto hasta que todos los elementos estén ordenados, pero antes de hacer esto notemos que los pasos anteriores los hemos hecho de forma específica para la primera pizza, es decir, la pizza de la posición cero, y por esto nuestro recorrido a iniciado en la posición uno, para no comparar la pizza consigo mismo. Sin embargo, debemos hacerlo en forma genérica, por lo tanto, al repetir esto para todas las demás pizzas, es decir, al hacer un segundo recorrido, lo haremos de forma genérica. Ahora al buscar el menor no iniciamos en la posición cero, sino que iniciamos en la posición "i", hace bien el intercambio, no pasamos la pizza menor a la posición cero, sino a la posición "i", que es en donde vamos revisando en este momento. Con esto hemos terminado el tema del algoritmo de selección, en la próxima sesión trataremos el tema del algoritmo de burbuja. [música]