Diferencia entre revisiones de «Estructuras de datos dinámicas/Algoritmos de ordenamiento»

Contenido eliminado Contenido añadido
Sin resumen de edición
Sin resumen de edición
Línea 3:
== Quicksort ==
 
Quicksort es un algoritmo de ordenamiento que utiliza la técnica 'divide y vencerás'. Consiste en dividir la secuencia a ser ordenada en dos partes, de tal manera que cada unos de los elementos de una de las partes sea mayor o igual a todos los elementos de la segunda parte. Cada una de las partes se divide y se le aplica a su vez este procedimiento recursivamente, hasta llegar a las secuencias unitarias. Al finalizar este procedimiento, la secuencia completa queda ordenada.
 
=== Algoritmo ===
# Elegir un elemento de la secuencia, llamado ''pivote''.
# Reordenar la secuencia de tal manera que los elementos menores que leel pivote aparezcan primero, y los mayores después (el orden de los elementos iguales al pivote no importa).
# Ordenar recursivamente las subsecuencias.
 
Línea 39:
 
==== Versión de ordenamiento sin espacio de almacenamiento adicional ====
La desventaja de la versión precedente es que requiere un almacenamiento extra de <math>\Omega O(n)</math>. Esto puede evitarse ordenando sobre una misma secuencia:
 
public static void quickSort(List secuencia, int indiceInferior, int indiceSuperior)
Línea 61:
{
quickSort(secuencia,0,secuencia.size());
return secuencia;;
}
 
=== Análisis ===
 
En el mejor de los casos, en cada paso se dividirá la secuencia en dos partes, de manera que la profundidad del árbol de llamadas iterativas será<math>\log_2n </math>, y como la cantidad de elementos a ser comparadosrecorridos en cada nivel del árbol es <math>n</math>, el orden de la complejidad del algoritmo será <math>\mathcal{\Omega} (n \log n)</math>.
 
En el peor caso, en cada paso se produce una partición completamente desbalanceada, es decir, queda un solo elemento de un lado, y el resto del otro lado, por lo que se debe iterar en cada paso <math>i</math> con <math>n - i</math>, lo que requerirá <math>n!</math> iteraciones: el orden de la complejidad del algoritmo será <math>O (n^2)</math>.
 
Como para una distribución uniforme de los datos, el caso se asemejará mucho más al primero, se dice que el orden de la complejidad promedio del algoritmo es <math>\Theta (n \log n)</math>.