[Música] Hola y bienvenidos, esta vez vamos a ver el algoritmo ordenamiento burbuja, utilizando el ejemplo del ordenamiento burbuja. Veamos primero como corre. En este tenemos igualmente una interfaz, tenemos varios estudiantes y acá este rectángulo representa el carnet, donde está el nombre y el código de cada estudiante, como siempre el botón ordenar no está haciendo nada porque no está implementado el algoritmo, pero siempre podemos elegir aleatoriamente nuevos estudiantes. Vamos a revisar la estructura de clases, tenemos tres clases para interfaz gráfica y tres clases para el mundo, la interfaz gráfica no va a ser de nuestro interés así que vamos directamente al mundo. La clase principal ordenador burbuja, provee una lista de estudiantes que se llama estudiantes y que van a ser los seis estudiantes que vamos a mostrar la interfaz y un arreglo dinámico de estudiantes elegibles, que va a ser una lista un poco más grande donde vamos a sacar esos seis estudiantes que vamos a mostrar y posteriormente organizar. Un atributo que representa el ultimo código disponible en estudiante, esto es para cuestiones de asignación de nuevos estudiantes, no nos interesa por el momento, el constructor que lee un archivo de texto con la lista de los estudiantes y elige por primera vez seis estudiantes. Finalmente, un método que retorna la lista de estudiantes un método que elige aleatoriamente los estudiantes cada vez que le damos al botón nuevos estudiantes y finalmente el método que nos interesa, el de ordenar estudiantes por burbuja. Veamos las clases estudiante y carnet. Estudiante, tiene solo un atributo, bueno de hecho tiene dos, tiene el atributo que representa al sexo del estudiante en un char que puede ser F para femenino, M para masculino y además posee otro objeto, uno solamente, un objeto de la clase carnet, que representa el carnet con la información personal del estudiante, o sea, nombre y código. El constructor se encarga justamente de llenar esos dos atributos, le asigna el sexo que le mandamos por parámetro y crea una nueva instancia de la clase carnet tenemos además los métodos que retornan el carnet y el sexo del estudiante. Finalmente, la clase carnet, la clase carnet tiene un nombre y un código, en el constructor simplemente se le manda el nombre del código y el genera un nuevo carnet para el estudiante y también los puede retornar como vemos acá. Manos a la obra, empecemos ahora con el método de ordenar estudiantes por burbuja, como recordamos mirando el seudocódigo, que seguramente querrán volver para echarle un vistazo y recordarlo, hay dos ciclos aquí también El primer ciclo lleva la cuenta de cuantos son los estudiantes que quedan ordenados al final, luego de una iteración del algoritmo, mientras que el segundo, es el que se encarga de ir recorriendo pareja por pareja todos los estudiantes, intercambiándolos si no están en orden. Así que empecemos declarando los dos ciclos, empecemos el primero y luego vamos con el segundo. En el primero recordemos entonces, que comenzamos en cero, que vamos tan lejos como nos permita la longitud del arreglo, y vamos aumentar de uno en uno, ahora se preguntarán, "¿Por qué la longitud menos uno?", bueno ya sabemos que la última iteración, la lista de los estudiantes, ya va a estar ordenada así que no va a ser necesario volver y reiterar. Mientras que, si vamos al segundo ciclo, pues esta vez vamos a comenzar, depende de cómo lo queramos hacer, pero nuestro caso comenzaremos desde el segundo elemento, comenzando del arreglo y vamos nuevamente esta vez hacia la longitud del arreglo de estudiantes, menos los estudiantes que ya están organizados, es decir, los que están en N, en la primera iteración habrán cero ordenados, en la segunda habrá uno y así sucesivamente, y vamos aumentar también de uno en uno, o sea, que la progresión es M es igual a M más uno. Esta parte es la parte que puede ser más difícil, porque necesitamos manejar varios objetos, recordemos que el criterio para organizar los estudiantes va a ser el nombre que aparece en el carnet, así que tenemos que hacer nuestro condicional para intercambiar sus posiciones, siempre que el nombre del estudiante que está en el carnet M, sea menor que el nombre que está en el carnet del estudiante en la posición M menos uno. Eso lo hacemos sencillo, primero el objeto de la clase del estudiante de la posición M, le preguntamos su carnet y al carnet le tenemos que preguntar el nombre, y tenemos que comparar esta cadena de caracteres del nombre con el estudiante en la posición M menos uno, pidiéndole su carnet y el carnet pidiéndole el nombre. Es importante no perderse en toda esta anotación y siempre que sea menor que cero, es decir, que el nombre que aparece en el carnet que está en el estudiante que está en la posición M menos uno, sea mayor que el nombre que aparece en el carnet, en la lista de estudiantes, en el estudiante en la posición M. Acá hay un pequeño error, esto debe ser un punto, si esto sucede, entonces hacemos el intercambio, entonces hacemos estudiantes en la posición M, es igual a estudiantes en la posición M menos uno queriendo decir que el estudiante en la posición M, cambia de lugar con el estudiante de la posición M menos uno y viceversa, el estudiante en M menos uno cambia con el estudiante en M. Aquí ya tenemos también otro error, resulta que, como sabemos si recordamos por variables asignaciones, al hacer este cambio, le voy hacer éste, realmente estamos asignando el valor de M menos uno a ambos espacios, estamos sobreescribiendo M y luego utilizando el valor sobrescrito para intentar hacer un cambio. Por lo tanto, vamos a crear una variable temporal, de tipo estudiante, la vamos a llamar temporal y vamos a guardar el valor de estudiante en la posición M, para que cuando hagamos el último cambio, solo tengamos que invocar al temporal y no estemos sobreescribiendo un valor que ya existe. Guardamos y lanzamos nuestro programa, miremos a los estudiantes, tenemos esta lista de estudiantes y vamos a ordenar, ahora tenemos a Carlos, María, Natalia, Paola, Patricia y Santiago, podemos observar muy claramente, que están en orden alfabético de sus nombres según aparecen en el carnet. Generemos unos estudiantes para otra prueba y ordenemos tenemos a Alejandro, Camila, Diego, Laura, Leonardo y Patricia. Eso concluye la prueba de algoritmo de ordenamiento de burbuja. [Música]