QUICK SORT

ESTRUCTURA DE DATOS

R. en promedio. . ordenar n elementos en un tiempo proporcional a n log n. Hoare basado en la técnica de divide y vencerás. que permite. El ordenamiento rápido (quicksort) es un algoritmo creado por el científico británico en computación C. A.

En este momento. .  Resituar los demás elementos de la lista a cada lado del pivote. de manera que a un lado queden todos los menores que él. el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada.Algoritmo. dependiendo de la implementación deseada. y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda. al que llamaremos pivote. El algoritmo funciona de la siguiente forma:  Elegir un elemento de la lista de elementos a ordenar.

y otra por los elementos a su derecha. Una vez terminado este proceso todos los elementos estarán ordenados . una formada por los elementos a la izquierda del pivote. La lista queda separada en dos sublistas.  Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento.

. el algoritmo será más o menos eficiente. dependiendo de la partición en que se elija.Selección de Pivote  El algoritmo básico del método Quicksort consiste en tomar cualquier elemento de la lista al cual denominaremos como pivote.

lo cual lo hace bastante rápido . Tomar un elemento cualquiera como pivote tiene la ventaja de no requerir ningún cálculo adicional.

 Otra opción puede ser recorrer la lista para saber de antemano qué elemento ocupará la posición central de la lista. para elegirlo como pivote. .

Técnicas de Reposicionamiento  Una idea preliminar para ubicar el pivote en su posición final sería contar la cantidad de elementos menores que él. y a su izquierda los mayores para que pueda aplicarse la recursividad. . y colocarlo a su izquierda.

 Existe. y j.     Se utilizan dos índices: i. se intercambian los elementos en esas posiciones. El algoritmo es el siguiente: Recorrer la lista simultáneamente con i y j: por la izquierda con i (desde el primer elemento). Cuando lista[i] sea mayor que el pivote y lista[j] sea menor. Repetir esto hasta que se crucen los índices. no obstante. al que llamaremos índice derecho. un procedimiento mucho más efectivo. . y por la derecha con j (desde el último elemento). porque sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o habrían sido intercambiados). al que llamaremos índice izquierdo. El punto en que se cruzan los índices es la posición adecuada para colocar el pivote.

.

int lb. } public void Partition(TipoElem[] x. j + 1. ref int j) { int down. } } x[lb] = x[up]. Partition(x. Ordenar(x. if (down < up) { temp = x[down]. x[up] = a. ub).1).Código C#                   class QuickSort { public void Ordenar(TipoElem[] x. int ub) { if (lb >= ub) return. int lb. up = ub. a = x[lb].                   while (down < up) { while(x[down]<=a && down<ub) down++. j . while (x[up] > a) up--. TipoElem temp. ref j). x[up] = temp. Ordenar(x. } . down = lb. a. lb. up. j = up. x[down] = x[up]. int ub. ub. lb. int j = 0.

Sign up to vote on this title
UsefulNot useful