0% encontró este documento útil (0 votos)
37 vistas6 páginas

Quicksort - Capitulo 07

Cargado por

pandaman010608
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas6 páginas

Quicksort - Capitulo 07

Cargado por

pandaman010608
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Robles Romero, Ronaldo Carlos

Martínez Domínguez, Mario Antonio

Gonzales Esquivel, Jeanfranco

Chacón García, Anthony Alexander

García Ventura, Anthony

Paz Romero, Alvaro Joseph

Vigo Huayán, Alexis

Facultad de Ingeniería, Universidad Nacional de Trujillo

Plataformas Tecnológicas

Ing. Suarez Rebaza, Camilo Ernesto

17 de noviembre de 2024
Capítulo 7: Quicksort

El capítulo 7 del libro Algorithms in Java de Robert Sedgewick aborda con


profundidad el algoritmo Quicksort, una técnica eficiente de ordenación que combina
conceptos simples con un rendimiento notable. A lo largo del capítulo, Sedgewick
ilustra el funcionamiento, las variaciones y las optimizaciones de este algoritmo, lo que
lo convierte en un recurso indispensable para estudiantes y profesionales de la
informática.

7.1. Algoritmo Básico: Dividir y Conquistar

El principio fundamental de Quicksort es dividir y conquistar:

 Elección del pivote: Se selecciona un elemento como referencia.


 Partición: Los elementos menores al pivote se mueven a su izquierda, y los
mayores, a la derecha.
 Recursión: Se aplica el mismo proceso a los subarreglos generados.

Este proceso asegura que el pivote termina en su posición final, mientras que los
subarreglos se reducen progresivamente. A continuación, se presenta un ejemplo del
código básico de Quicksort:
En este ejemplo, el pivote se elige como el último elemento del arreglo, y el proceso de
partición asegura que todos los elementos menores estén antes que el pivote. Esta
implementación básica es eficiente pero vulnerable a casos desbalanceados.

7.2. Rendimiento: Análisis de Casos

El análisis del rendimiento de Quicksort destaca los siguientes casos:

 Caso promedio: O(n log n). Ideal para la mayoría de los datos reales, donde el
pivote divide el arreglo aproximadamente en partes iguales.
 Peor caso: O(n 2). Ocurre cuando las particiones están muy desbalanceadas,
como al ordenar un arreglo ya ordenado.
 Mejor caso: O(n log n), cuando las divisiones son perfectas.

En palabras del autor, "el equilibrio es la clave del rendimiento de Quicksort". Para
mitigarlo, el capítulo introduce estrategias como Median-of-Three Partitioning.

7.3. Optimización de la Pila

El uso recursivo puede agotar la pila de llamadas en arreglos grandes. Sedgewick


sugiere:

- Ordenar primero los subarreglos más pequeños.


- Cambiar a un enfoque iterativo para reducir la profundidad de la pila.

Ejemplo iterativo de Quicksort:


Un ejemplo práctico sería evitar profundizar en problemas grandes antes de resolver los
pequeños: como un chef que corta primero los ingredientes pequeños para ahorrar
tiempo y espacio en la tabla de cocina.

7.4. Manejo de Subarreglos Pequeños

Ordenar subarreglos pequeños con Quicksort puede ser ineficiente. Por eso, el autor
sugiere cambiar a Insertion Sort para arreglos de tamaño reducido. Este cambio mejora
el rendimiento general, como cambiar una herramienta sofisticada por una simple
cuando la tarea lo permite, similar a usar un cuchillo pequeño para cortar detalles finos
después de usar uno grande para dividir el conjunto.

7.5. Median-of-Three Partitioning: Reducción del Peor Caso

Seleccionar el pivote de manera estratégica puede mejorar significativamente el


rendimiento. Median-of-Three Partitioning elige como pivote la mediana entre el
primer, último y elemento central del arreglo, reduciendo el riesgo de particiones
desbalanceadas.

Ejemplo de partición con mediana de tres:

7.6. Manejo de Claves Duplicadas

Quicksort enfrenta desafíos cuando el arreglo contiene valores duplicados, lo que puede
causar particiones ineficientes. El autor aborda esto dividiendo el arreglo en tres partes:

 Elementos menores al pivote.


 Elementos iguales al pivote.
 Elementos mayores al pivote.

Este enfoque mejora el rendimiento en datos reales, donde las claves duplicadas son
comunes, como organizar cartas de una baraja donde varios naipes tienen el mismo
valor.

7.7. Extensiones: Ordenación de Cadenas y Vectores

Quicksort no se limita a números enteros; también se adapta para ordenar cadenas y


vectores. Por ejemplo, al ordenar palabras en un diccionario, la partición debe comparar
caracteres, lo que añade complejidad, pero demuestra la flexibilidad del algoritmo.

7.8. Selección: Encontrar un Elemento Sin Ordenar Todo

Una variante interesante de Quicksort es usarlo para resolver problemas de selección,


como encontrar el k -ésimo elemento más pequeño en un arreglo sin ordenarlo
completamente. Esto se logra adaptando el proceso de partición para enfocarse
únicamente en el subarreglo relevante, como buscar un libro específico en una
biblioteca sin necesidad de ordenar todos los estantes.

Ejemplo de selección con Quicksort:


Conclusión

Quicksort se presenta como un paradigma de simplicidad y eficiencia en el diseño de


algoritmos. Su combinación de conceptos básicos como la división y conquista con
optimizaciones inteligentes lo posiciona como una herramienta esencial en la
informática. Sin embargo, no está exento de desafíos, ya que su rendimiento puede
verse afectado por particiones desbalanceadas o por el uso excesivo de la pila en
implementaciones recursivas. Estas limitaciones, aunque significativas, se abordan
mediante mejoras como la partición por mediana de tres, el manejo eficiente de
subarreglos pequeños y la adaptación para casos específicos como la selección del k -
ésimo elemento.

A pesar de estas complejidades, Quicksort sobresale por su versatilidad y su capacidad


para manejar grandes volúmenes de datos de manera eficiente. Su relevancia no solo
radica en su uso práctico, sino también en su valor educativo, ya que ofrece una base
sólida para entender los principios fundamentales de la ordenación. En definitiva,
Quicksort no solo es una herramienta técnica, sino un ejemplo perdurable de cómo un
diseño algorítmico bien fundamentado puede combinar elegancia y funcionalidad.

Referencias

Sedgewick, R. (2003). Algorithms in Java: Parts 1-4 (3rd ed.).


Addison-Wesley. ISBN 0-201-36120-5.

También podría gustarte