Vous êtes sur la page 1sur 11

QUICK SORT

ESTRUCTURA DE DATOS

El ordenamiento rpido (quicksort) es un

algoritmo creado por el cientfico britnico en computacin C. A. R. Hoare basado en la tcnica de divide y vencers, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n.

Algoritmo.
El algoritmo funciona de la siguiente forma:
Elegir un elemento de la lista de elementos a ordenar, al

que llamaremos pivote. 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. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementacin deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponder en la lista ordenada.

La lista queda separada en dos sublistas, una

formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha. 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

Seleccin de Pivote
El algoritmo bsico del mtodo Quicksort consiste

en tomar cualquier elemento de la lista al cual denominaremos como pivote, dependiendo de la particin en que se elija, el algoritmo ser ms o menos eficiente.

Tomar un elemento cualquiera como pivote tiene

la ventaja de no requerir ningn clculo adicional, lo cual lo hace bastante rpido

Otra opcin puede ser recorrer la lista para saber

de antemano qu elemento ocupar la posicin central de la lista, para elegirlo como pivote.

Tcnicas de Reposicionamiento
Una idea preliminar para ubicar el pivote en su

posicin final sera contar la cantidad de elementos menores que l, y colocarlo a su izquierda, y a su izquierda los mayores para que pueda aplicarse la recursividad.

Existe, no obstante, un procedimiento mucho ms efectivo.

Se utilizan dos ndices: i, al que llamaremos ndice izquierdo, y j, al que llamaremos ndice derecho. El algoritmo es el siguiente: Recorrer la lista simultneamente con i y j: por la izquierda con i (desde el primer elemento), y por la derecha con j (desde el ltimo elemento). Cuando lista[i] sea mayor que el pivote y lista[j] sea menor, se intercambian los elementos en esas posiciones. Repetir esto hasta que se crucen los ndices. El punto en que se cruzan los ndices es la posicin adecuada para colocar el pivote, porque sabemos que a un lado los elementos son todos menores y al otro son todos mayores (o habran sido intercambiados).

Cdigo C#

class QuickSort { public void Ordenar(TipoElem[] x, int lb, int ub) { if (lb >= ub) return; int j = 0; Partition(x, lb, ub, ref j); Ordenar(x, lb, j - 1); Ordenar(x, j + 1, ub); } public void Partition(TipoElem[] x, int lb, int ub, ref int j) { int down, up; TipoElem temp, a; a = x[lb]; up = ub; down = lb;

while (down < up) { while(x[down]<=a && down<ub) down++; while (x[up] > a) up--; if (down < up) { temp = x[down]; x[down] = x[up]; x[up] = temp; } } x[lb] = x[up]; x[up] = a; j = up; }

Vous aimerez peut-être aussi