Quicksort

quicksort

Quicksort

Un algoritmo de ordenación muy académico es el quicksort.

Es un método de ordenamiento de datos que utiliza la estrategia de divide y vencerás. 😉

Se divide el conjunto de datos que se quiere ordenar en 2 subconjuntos: uno con los datos más pequeños y otro con los datos más grandes.

Luego se ordena cada subconjunto de forma independiente y finalmente se combinan los resultados.

Este contenido está restringido.
HAZTE PREMIUM
para difrutar de los audios y vídeos exclusivos.

Ejemplo

Dados los números: 3, 8, 5, 4, 1, 9, 7

Se toma como pivote el número 5 y se dividen los números en 2 subconjuntos:

  • Subconjunto A: 3, 4, 1
  • Subconjunto B: 8, 9, 7

Luego se ordena cada subconjunto de forma independiente:

  • Subconjunto A: 1, 3, 4
  • Subconjunto B: 7, 8, 9

Finalmente, se combinan los resultados y se obtiene el siguiente orden: 1, 3, 4, 5, 7, 8, 9

Ejemplo de implementación:

/**  * O(n log (n)) - O(n²)  */ fun quickSort(     list: List<Int> ): List<Int> {     if (list.size < 2) {         return list     }      val index = list.size / 2     val pivot = list[index]      val equal = list.filter { it == pivot }     val less = list.filter { it < pivot }     val greater = list.filter { it > pivot }      return quickSort(less) + equal + quickSort(greater) }

Y su correspondiente test unitario:

import org.junit.Assert.assertTrue import org.junit.Test  class QuickSortKtTest {      @Test     fun `check quickSort order a list`() {         val list = listOf(             1,             5,             6,             3,             7         )          val orderedList = quickSort(list)          assertTrue(             listOf(                 1,                 3,                 5,                 6,                 7             ) == orderedList         )     } }

Ventajas

  • Es un algoritmo de ordenamiento muy eficiente en la mayoría de los casos
  • No requiere mucho espacio adicional

Desventajas

Es posible que el algoritmo no funcione correctamente si el pivote es el elemento más grande o más pequeño del conjunto de datos.

Puntación Big O

En notación Big O, tiene un rendimiento desde O(n log (n)) en el mejor de los casos, a O(n2) en el peor de ellos.

Conclusión

Es también un clásico, al igual que el algortimo de la burbuja. Pero mucho más rápido.

Y también es un buen modo de iniciarse en este campo para luego entender otros algoritmos más complejos.

Publicado: 2022-11-09 Actualizado: 2023-09-14