Ordenamiento rápido (Quick sort) en Ruby

Ordenamiento rápido o *Quick sort* es otro algoritmo clásico de ordenamiento.

![Animación del algoritmo quick sort – wikipedia](https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif “Aquí se puede ver el uso del pivote para dividir la lista de elementos y ordenarlos”)

En este algoritmo se usa un *pivote* que sirve para separar el arreglo, con el fin de dividir el ordenamiento en partes más pequeñas. La elección del *pivote* se puede realizar de varias maneras, pero en este caso elegí la más sencilla que es el elemento que esta en medio del arreglo.

Como pueden ver, el manejo de arreglos que hace Ruby esta para dar miedo, luego viene la *recursividad* que es básicamente cuando el método se llama nuevamente a sí mismo.

Como pueden ver hay varias curiosidades en este ejemplo.

* **self** es un objeto muy interesante, porque en ruby, durante cada instrucción, solo se puede manejar un objeto a la vez y [self](http://rubytutorial.wikidot.com/self) es ese objeto. Durante la *recursividad* se van a manejar una gran cantidad de subarreglos más pequeños, de esta manera logramos hacerlo sin declarar otra variable.
* El método [find_all](http://ruby-doc.org/core-2.0/Enumerable.html#method-i-find_all) que devuelve otro arreglo que cumpla con la condición, en este caso valores más grandes o pequeños que el *pivote*.

Como pueden ver Ruby es un lenguaje con un alto nivel de optimización, entre más lo conozco, más quiero seguir aprendiendo.

### Referencias.
* [Quick sort – wikipedia](https://es.wikipedia.org/wiki/Quicksort)

Ordenamiento de burbuja en Ruby

Nuevamente estoy intentando aprender Ruby, pero para ser honesto se me dificulta un poco, esta tan optimizado que muchas cosas se pueden hacer en prácticamente en una solo línea. Además tengo muchos vicios de otros lenguajes, principalmente … por favor no se burlen…¡BASIC!.

Entonces recordé la forma en que aprendí otros lenguajes como Pascal o C y fue haciendo algoritmos clásicos.

Una serie de algoritmos clásicos son los de ordenamiento. Empecé con el más sencillo conocido como Ordenamiento de burbuja o Bubble Sort.

Es fácil de entender, se van comparando los elementos de una lista de manera ordenada en pares, si un par esta desordenado, intercambia sus lugares. Cuando se termina esta “pasada” se vuelve a empezar, hasta que ya no se hacen intercambios, en ese momento la lista esta ordenada.

Algoritmo de burbuja: wikipedia

Les dejo el código que desarrolle en Ruby, abunda en comentarios, en este caso se hace uso de arreglos y sus índices, también el manejo de bucles y condiciones, vamos que es un ejemplo redondo.

Al final del programa muestro como se debería de hacer el ordenamiento de un arreglo usando el método sort de Ruby que hace todo el trabajo en una sola línea de código.

Para aprender más sobre Ruby.

Estos sitios me han ayudado mucho para familiarizarme con Ruby y su filosofía:

Actualización

Atendiendo a los comentarios del maestro Gunnar Wolf hice la siguiente versión de este algoritmo de ordenación. Agregando un método a la clase Array de nombre swap que se encarga de hacer el intercambio de valores en el arreglo. Y usando times para hacer el recorrido de todos los índices del arreglo.