Sunteți pe pagina 1din 7

INTRODUCCIÓN.

Ordenación y Búsqueda son operaciones básicas en el campo de la documentación y en las que


según señalan estadísticas, las computadoras emplean la mitad de su tiempo.

Aunque su uso puede ser con vectores y con archivos, nos referiremos a vectores.

La ordenación (clasificación) es la operación de organizar un conjunto de datos en algún orden dado,


tal como creciente o decreciente en datos numéricos, o bien en orden alfabético directo o inverso.
Operaciones típicas de ordenación son: lista de números, archivos de clientes de banco, nombres
de una agenda telefónica, etc. En síntesis la ordenación significa poner objetos en orden (orden
numéricos para los números y alfabético para los caracteres) ascendente o descendente.
Trabajo de Investigación

QuickSort. Es un algoritmo basado en la técnica de divide y vencerás, que permite, en promedio,


ordenar n elementos en un tiempo proporcional a n log n.

Descripción del algoritmo:

1. Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.


2. 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, y al otro los mayores. Los elementos iguales al pivote
pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la
implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le
corresponderá en la lista ordenada.
3. La lista queda separada en dos sub-listas, una formada por los elementos a la izquierda del
pivote, y otra por los elementos a su derecha.
4. Repetir este proceso de forma recursiva para cada sub-lista mientras éstas contengan más
de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados.

Eficiencia del algoritmo

La eficiencia del algoritmo depende de la posición en la que termine el pivote elegido. En el mejor
caso, el pivote termina en el centro de la lista, dividiéndola en dos sub-listas de igual tamaño. En
este caso, el orden de complejidad del algoritmo es O(n•log 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²).

Demostración

Suponiendo que el número total de elementos a ordenar es potencia de dos, es decir, n = 2k. De
aquí podemos ver que k = log2(n), donde k es el número de divisiones que realizará el algoritmo.

En la primera fase del algoritmo habrán n comparaciones, en la segunda fase el algoritmo creará
dos sub-listas aproximadamente de tamaño n/2. El número total de comparaciones de estas dos
sub-listas es: 2(n/2) = n. En la tercera fase el algoritmo procesará 4 sub-listas más, por tanto el
número total de comparaciones en esta fase es 4(n/4) = n.

En conclusión, el número total de comparaciones que hace el algoritmo es:


Optimización del algoritmo

Cabe destacar que de usarse en su versión recursiva las siguientes optimizaciones y sus
desventajas no se ven vistas en el tiempo de ejecución del mismo manteniéndose, así el tiempo de
ejecución planteado en un principio.

Técnicas de elección del pivote

El algoritmo básico del método QuickSort consiste en tomar cualquier elemento de la lista al cual
denominaremos como pivote, dependiendo de la partición en que se elija, el algoritmo será más o
menos eficiente. Tomar un elemento cualquiera como pivote tiene la ventaja de no requerir
ningún cálculo adicional, lo cual lo hace bastante rápido. Sin embargo, esta elección «a ciegas»
siempre provoca que el algoritmo tenga un orden de O(n²) para ciertas permutaciones de los
elementos en la lista.

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. Esto puede hacerse en O(n) y asegura que hasta en el
peor de los casos, el algoritmo sea O(n•log n).

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 colocarlo un lugar más arriba, moviendo luego todos esos elementos menores
que él a su izquierda, para que pueda aplicarse la recursividad. Existe, no obstante, un
procedimiento mucho más 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 simultáneamente 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 posición
adecuada para colocar el pivote, porque sabemos que a un lado los elementos son todos menores
y al otro son todos mayores (o habrían sido intercambiados).

Funcionamiento

1. Se debe llamar a la función QuickSort desde donde quiera ejecutarse.


2. Ésta llamará a colocar pivote para encontrar el valor del mismo.
3. Se ejecutará el algoritmo QuickSort de forma recursiva a ambos lados del pivote.
Análisis del QuickSort:

QuickSort en general se puede escribir de la siguiente manera.

Los primeros dos términos son para dos


llamadas recursivas, el último término es para el proceso de partición. K es la cantidad de
elementos que son más pequeños que el pivote.

El tiempo empleado por QuickSort depende de la matriz de entrada y la estrategia de partición.


Los siguientes son tres casos.

Posibles casos:

Peor caso: el peor de los casos ocurre cuando el proceso de partición siempre elige el elemento
más grande o el más pequeño como pivote. Si consideramos la estrategia de partición anterior,
donde el último elemento siempre se selecciona como pivote, el peor caso ocurriría cuando la
matriz ya esté ordenada en orden ascendente o decreciente. Lo siguiente es recurrencia para el
peor de los casos.

La solución de la recurrencia anterior es θ(n2).

Mejor caso:

El mejor caso ocurre cuando el proceso de partición siempre escoge el elemento medio como
pivote. Lo siguiente es recurrencia para el mejor caso.

La solución de la recurrencia anterior es θ(nLogn). Se puede resolver usando el caso 2 del Teorema
maestro.

Caso promedio:

Para hacer un análisis de caso promedio, debemos tener en cuenta todas las permutaciones
posibles de conjunto y calcular el tiempo que toma cada permutación que no parece fácil.
Podemos tener una idea del caso promedio al considerar el caso cuando la partición pone O (n / 9)
elementos en un conjunto y O (9n / 10) elementos en otro conjunto. Lo siguiente es recurrencia
para este caso.

La solución de la recurrencia anterior también es O (nLogn)


Implementación del Algoritmo.

Salida:
Recomendaciones:

 El método de ordenación en un caso ordinario es eficiente para grandes cantidades de


datos, porque si se quiere procesar cantidades pequeñas los algoritmos de burbuja y
inserción son más eficientes.
 Si se usa el método de ordenación QuickSort es mejor implementar su código seleccionado
como pivote el término medio del vector porque es más fácil de implementar y su código es
más sencillo.
Conclusiones:

 Analizando QuickSort en el mejor y peor caso se puede ver que es uno de los mejores
métodos de ordenación, su implementación a pesar de no ser muy sencilla tampoco es
complicada haciendo de este un algoritmo interesante y de elegante estructura y de mucha
eficiencia.
 Este algoritmo de ordenación es un ejemplo claro de que el método divide y vencerás es
efectivo cuando tienes cantidades grandes de datos por trabajar y necesitas ahorrar tiempo
y recursos.

S-ar putea să vă placă și