Resumen: implementar QuickSort en Java usando recursividad, selección de pivote y principio divide y vencerás para ordenar arreglos, ya sea de tipo int o de tipo String.
Este algoritmo es uno de los más rápidos al momento de ordenar arreglos, en comparación con el ordenamiento de burbuja.
Así como es más rápido, es un poco complejo de entender, pero básicamente se trata de dos cosas:
Primero debemos encontrar la partición del arreglo, comenzamos un ciclo infinito y apuntamos dos variables al inicio y final del arreglo. Mientras cada elemento en el índice de cada variable esté en orden, acercamos las variables entre sí, es decir, aumentamos izquierda y disminuimos derecha.
Si la izquierda superó o igualó a la derecha, significa que los elementos ya estaban en orden así que regresamos el índice de la derecha para que de ahí se divida el arreglo, y termina el ciclo.
En caso de que la izquierda no haya superado a la derecha significa que por ahí había un elemento desordenado, por lo que intercambiamos las variables de cada extremo y el ciclo se sigue ejecutando.
La partición es lo que realmente ordena el arreglo e indica de dónde partir para dividir el arreglo. Entonces en el quicksort
invocamos a particion
para saber cómo dividir el arreglo (es decir, desde cuál índice) e invocamos a quicksort
dos veces con cada mitad del arreglo.
Veamos el código que va a generar todo esto. Primero vemos el de la partición, que es el que ordena y selecciona desde dónde dividir el arreglo:
Es realmente sencillo, y al final regresamos el índice en donde se va a dividir el arreglo. Después, en la implementación, usamos recursión como lo dije:
La función recibe el arreglo, el inicio y el fin. Después utiliza esos elementos para obtener el índice para dividir, y envía las dos mitades a ordenarse.
La función no regresa nada porque ordena el arreglo internamente.
Así que al invocarla por primera vez debemos pasar el arreglo
, el 0
y la longitud - 1
.
Ahora veamos cómo ordenar un arreglo de cadena usando QuickSort. Esto es igualmente fácil y el código casi no cambia, pues usamos compareTo para comparar cadenas en Java.
El algoritmo es el mismo, solo cambia la comparación por lo que no explicaré el método. La selección del pivote y la función quicksort queda así (presta atención a la línea 12):
Si te molestan los comentarios puedes removerlos, al final el código es realmente poco, lo complejo es entenderlo de manera humana.
Ahora voy a demostrar que lo expuesto realmente funciona; veamos cómo probar los métodos. Queda así:
Estoy usando Arrays.toString
para imprimir el arreglo de forma rápida; si tú quieres, puedes imprimirlos con un ciclo o algo así.
La salida de la ejecución del código es:
Si tú quieres probarlo puedes ejecutar el código en línea.
Te invito a ver el método de la burbuja en Java, el método QuickSort en C o más tutoriales sobre Java.
En este post te enseñaré a imprimir HTML en una impresora térmica. Vas a ser…
En este artículo te voy a enseñar a monitorear la cola de impresión de una…
En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…
Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…
En un post previo te enseñé a enviar un mensaje en nombre de un Bot…
En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…
Esta web usa cookies.
Ver comentarios
Jajaja parece que alguien por aqui es fan de Resident Evil xD
Gracias por la información! Está muy clara y bien explicada, me ayudaste muchísimo
Gracias por sus comentarios. Me agrada saber que le haya funcionado.
Saludos!