Vous êtes sur la page 1sur 13

Quicksort

Integrantes:
Barboza Cervantes Gerson Cortes Torres Joaqun Domnguez Soria Luis Enrique Jurez Cervantes Osvaldo Moctezuma Pascual Luis Alfredo Seplveda Alvarado Jos Rafael

QuickSort
Definicin: Es un algoritmo de ordenacin, una mejora sustancial del mtodo de intercambio directo y recibe el nombre de Quick Short por la velocidad con que ordena los elementos del arreglo. Fue diseado por Sir Charles Antony Richard Hoare en 1960 un cientfico en computacin.
Este divide aleatoriamente el arreglo para comparar si un elemento es mayor o menor. Dependiendo el resultado lo partir ya sea por la izquierda o derecha, de esta forma se repite el procedimiento para ordenarlos.

CARACTERISTICAS
Se basa en la tctica divide y vencers: consiste en dividir un problema y luego juntar las respuestas de estos para obtener la solucin al problema central (subdividiendo el array en arrays mas pequeos y ordenar estos). Es considerado entre los mas rpidos y eficientes de los mtodos de ordenacin interna.

COMO FUNCIONA
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 encuentre 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. El proceso termina cuando todos los elementos se encuentran en posicin correcta en el arreglo

casos
Como se puede suponer, la eficiencia del algoritmo depende de la posicin en la que termine el pivote elegido. En el mejor caso, el pivote termina en el centro de la lista, dividindola en dos sublistas de igual tamao. En este caso, el orden de complejidad del algoritmo es O(nlog n). En el caso promedio, el orden es O(nlog n).

En el peor caso: El pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de O(n). El peor caso depender de la implementacin del algoritmo, aunque habitualmente ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principalmente depende del pivote, si por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del array, y el array que le pasamos est ordenado, siempre va a generar a su izquierda un array vaco, lo que es ineficiente.

Ejemplo
En el siguiente ejemplo se marcan el pivote y los ndices i y j con las letras p, i y j respectivamente. Comenzamos con la lista completa. El elemento pivote ser el 4: 5-3-7-6-2-1-4 p

Comparamos con el 5 por la izquierda y el 1 por la derecha. 5-3-7-6-2-1-4 i j p 5 es mayor que 4 y 1 es menor. Intercambiamos: 1-3-7-6-2-5-4 i j p

Avanzamos por la izquierda y la derecha: 1-3-7-6-2-5-4 i j p


3 es menor que 4: avanzamos por la izquierda. 2 es menor que 4: nos mantenemos ah. 1-3-7-6-2-5-4 i j p

7 es mayor que 4 y 2 es menor: intercambiamos. 1-3-2-6-7-5-4 i j p Avanzamos por ambos lados: 1-3-2-6-7-5-4 iyj p En este momento termina el ciclo principal, porque los ndices se cruzaron. Ahora intercambiamos lista[i] con lista[sup] (pasos 1618): 1-3-2-4-7-5-6 p

Aplicamos recursivamente a la sublista de la izquierda (ndices 0 - 2). Tenemos lo siguiente: 1-3-2

1 es menor que 2: avanzamos por la izquierda. 3 es mayor: avanzamos por la derecha. Como se intercambiaron los ndices termina el ciclo. Se intercambia lista[i] con lista[sup]: 1-2-3
El mismo procedimiento se aplicar a la otra sublista. Al finalizar y unir todas las sublistas queda la lista inicial ordenada en forma ascendente. 1-2-3-4-5-6-7

DIVIDE Y VENCERS.

Vous aimerez peut-être aussi