Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmometodoquicksort
Algoritmometodoquicksort
Tipos de Algoritmos
Para poder ordenar una cantidad determinada de nmeros almacenados en un
vector o matriz, existen distintos mtodos (algoritmos) con distintas
caractersticas y complejidad.
Existe desde el mtodo ms simple, como el Bubblesort (o Mtodo Burbja),
que son simples iteraciones, hasta el Quicksort (Mtodo Rpido), que al estar
optimizado usando recursin, su tiempo de ejecucin es menor y es ms
efectivo.
Algoritmos basados en mtodos Iterativos:
Estos mtodos son simples de entender y de programar ya que son iterativos,
simples ciclos y sentencias que hacen que el vector pueda ser ordenado.
Dentro de los Algoritmos iterativos encontramos:
Burbuja
Insercin
Seleccin
Shellsort
Algoritmos basados en mtodos Recursivos:
Estos mtodos son an ms complejos, requieren de mayor atencin y
conocimiento para ser entendidos. Son rpidos y efectivos, utilizan
generalmente la tcnica Divide y Vencers, que consiste en dividir un
problema grande en varios pequeos para que sea ms fcil resolverlos.
Mediante llamadas recursivas a s mismos, es posible que el tiempo de
ejecucin y de ordenacin sea ms ptimo.
Dentro de los algoritmos recursivos encontramos:
Ordenamiento por Mezclas (merge)
Ordenamiento Rpido (quick)
Mtodo Quicksort
El mtodo Quicksort basa su estrategia en la idea intuitiva de que es ms fcil
ordenar una gran estructura de datos subdividindolas en otras ms pequeas
introduciendo un orden relativo entre ellas. En otras palabras, si dividimos el
arreglo a ordenar en dos subarreglos de forma que los elementos del
subarreglo inferior sean ms pequeos que los del subarreglo superior, y
aplicamos el mtodo reiteradamente, al final tendremos el arreglo inicial
totalmente ordenado. Existen adems otros mtodos conocidos, el de
ordenacin por montculo y el de shell.
El algoritmo Quicksort fue desarrollado en 1962 por C.A.R. Hoare, antes de que
se implementaran los primeros lenguajes con capacidad para ejecutar
funciones recursivas.
from++; to--;
}
}while(from <= to);
if(a < to)
{
_Quicksort(matrix, a, to);
}
if(from < b)
{
_Quicksort(matrix, from, b);
}
this.matrix = matrix;
}
Descripcin del Algoritmo:
Elegir un elemento de la lista de elementos a ordenar, al que llamaremos
pivote.
La idea central de este algoritmo consiste en lo siguiente:
Se toma un elemento x de una posicin cualquiera del arreglo.
Se trata de ubicar a x en la posicin correcta del arreglo, de tal forma
que todos los elementos que se encuentran a su izquierda sean
menores o iguales a x y todos los elementos que se encuentren a su
derecha sean mayores o iguales a x.
Se repiten los pasos anteriores pero ahora para los conjuntos de datos
que se encuentran a la izquierda y a la derecha de la posicin correcta
de x en el arreglo.
Resituar los dems elementos de la lista a cada lado del pivote, de
manera que a un lado queden todos los menores que l, y al otro los
mayores. En este momento, el pivote ocupa exactamente el lugar que le
corresponder en la lista ordenada.
Repetir este proceso de forma recursiva para cada sublista mientras
stas contengan ms de un elemento. Una vez terminado este proceso
todos los elementos estarn ordenados.
Como se puede suponer, la eficiencia del algoritmo depende de la
posicin en la que termine el pivote elegido.
Anlisis del algoritmo:
Estabilidad: No es estable.
Requerimientos de Memoria: No requiere memoria adicional en su forma
recursiva. En su forma iterativa la necesita para la pila.
Ventajas:
Muy rpido.
No requiere memoria adicional.
Desventajas:
Implementacin un poco ms complicada.
Recursividad (utiliza muchos recursos).
Algoritmo
Burbuja
Insercin
Seleccin
Shell
Merge
Quick (Rpido)
Operaciones mximas
(n)
(n/4)
(n)
(n logn)
(n logn)
(n) en peor de los casos y (n logn) en
el
promedio de los casos.
COMPARACION DE TIEMPOS
Se han ordenado una cantidad determinada de elementos aleatorios en una
lista mediante distintos mtodos de ordenamiento (en segundos).
256 elementos
Burbuja: 0.0040
Seleccin: 0.0030
Insercin: 0.0040
Rpido: 0.0010
Shell: 0.0010
Merge: 0.0040
512 elementos
Burbuja: 0.0050
Seleccin: 0.0040
Insercin: 0.0050
Rpido: 0.0010
Shell: 0.0020
Merge: 0.003
2048 elementos
16384 elementos
Burbuja: 0.022
Seleccin: 0.015
Insercin: 0.013
Rpido: 0.0010
Shell: 0.0060
Merge: 0.0050
Burbuja: 1.055
Seleccin: 0.9
Insercin: 0.577
Rpido: 0.0080
Shell: 0.0090
Merge: 0.014
Eligiendo el Pivote
La velocidad de ejecucin del algoritmo depende en gran medida de cmo se
implementa este mecanismo, una mala implementacin puede suponer que el
algoritmo se ejecute a una velocidad mediocre o incluso psima. La eleccin
del pivote determina las particiones de la lista de datos, por lo tanto, huelga
decir que esta es la parte ms crtica de la implementacin del algoritmo
QuickSort. Es importante intentar que al seleccionar el pivote v las particiones
L1 y L3 tengan un tamao idntico dentro de lo posible.
Elegir el primero o el ltimo de la lista nunca es una buena idea ya que los
elementos de la lista no estn uniformemente distribuidos. Por otro lado, si
contamos con un buen generador de nmeros aleatorios, podemos elegir un
pivote al azar de entre todos los elementos de la lista. Esta estrategia es
segura puesto que es improbable que un pivote al azar d como resultado una
particin mala, pero tiene como contrapartida que en algunas ocasiones si
puede arrojar un resultado de O(n2), adems, la eleccin de nmeros
aleatorios puede incrementar el tiempo de ejecucin del algoritmo.
Una buena estrategia para solucionar la seleccin del pivote ampliamente
extendida es la conocida como a tres bandas. En esta estrategia lo que se
persigue es hacer una media con los valores de tres de los elementos de la
lista. Por ejemplo si nuestra lista es [ 8, 4, 9, 3, 5, 7, 1, 6, 2 ] la media sera ( 8 +
2 + 5 ) / 3 = 5 lo que dara lugar a las siguientes particiones:
L1 = [ 8, 9, 7, 6 ]
L2 = [ 5 ]
L3 = [ 1, 2, 4, 3 ]
Esta estrategia no nos asegura que siempre nos dar la mejor seleccin del
pivote, sino que estadsticamente, la eleccin del pivote sea buena.