FUNCION PARTICION La función partición utiliza los elementos definidos en el módulo TIPOS.O y recibe como entradas: 1. - el vector en el que moverá el pivote, pasado por referencia, ya que se ha de modificar, no es conveniente duplicarlo, es decir, pasarlo por valor, ya que ocuparía con cada recursión más y más memoria. 2. - los indices que indican la parte del vector que será modificada, es decir, elemento superior e inferior de la zona a modificar, con lo cual acotamos la zona del vector que se modificará. 3. - el elemento que va a ser utilizado como pivote en la partición. La función emplea el algoritmo estudiado en las clases de teoría de la asignatura, es decir, dado un vector y un elemento (pivote), modifica la posición de dicho elemento hasta dejarla con todos lo elementos a su derecha mayores o iguales a él y con todos los elementos a su izquierda menores a él. PROGRAMA QUICKSORT El programa QUICKSORT, que incluye el procedimiento del mismo nombre, muestra un menú donde se da a elegir la función que se quiere que realice el programa, es decir, si se quiere ordenar un vector, mediante el procedimiento quicksort, o si se quiere realizar el perfil temporal de dicha ordenación, tomando diversos tamaños de vector y obteniendo la media de varias pruebas para cada tamaño. Si se elige ordenar el vector, el programa pide la longitud que se le quiere dar y luego da a elegir entre introducirle el vector por teclado o que lo haga el programa por si solo, si se elige esta última opcion, el programa lo genera mediante el procedimiento genera_instancia, en caso contrario se pide al usuario que introduzca el valor de los elementos del vector a traves del teclado. Una vez dado el vector el programa lo ordena a traves del procedimiento quicksort. El procedimiento quicksort produce una partición del vector de entrada (o sea, de la zona del vector original sobre la cual actua ) y vuelve a actuar recursivamente sobre las dos partes generadas por el procedimiento partición. PROCEDIMIENTO PERFIL La otra opción del programa, la de obtener el perfil temporal del programa de ordenación, es más automática ya que el programa a traves del módulo perfil.o genera los vectores con distintos tamaños, las distintas instancias y hace las repeticiones necesarias para obtener un resultado fiable, tomando como resultado final la media de los tiempos individuales. El resultado del procedimiento perfil se guarda en un vector que tiene la siguiente estructura: tperfil_alg: 1 10 2 50 3 100 4 200 5 400 6 600 7 800 8 1000 9 1200 10 1400 11 1600 12 1800 13 2000 p |m p |m p |m p |m p |m p |m p |m p |m p |m p |m p |m p |m p |m Se trata de un vector de registros, donde cada registro tiene tres campos, uno con el tamaño del vector para dicho caso, y otros dos donde guardará los resultados del perfil para los casos peor y el caso promedio de cada problema. El funcionamiento del procedimiento perfil es el siguiente: Para cada tamaño de problema el procedimiento perfil realiza diversas instancias, y para cada una de ellas, dependiendo del tamaño del vector, repite la ordenacion varias veces y obtiendo finalmente la media de las distintas repeticiones realizadas. Ademas tambien realiza el perfil en el caso peor de ordenación del vector, es decir, cuando el vector está ordenado de modo descendente. Los resultados obtenidos son los siguientes: Promedio 10 50 100 200 400 600 800 1000 1200 1400 1600 1800 2000 Peor 0.04 0.37 1.14 3.82 12.41 22.77 33.76 44.77 55.33 66.25 76.53 86.20 98.17 0.05 0.27 1.09 3.64 13.10 29.58 51.57 78.26 111.48 150.80 197.17 247.52 305.76 QUICKSORT 350 300 250 TIEM PO 2 0 0 150 100 Peor Promedio 50 0 10 50 100 200 400 600 800 1000 1200 1400 1600 1800 2000 TA M A ÑO Promedio 10 50 100 200 400 600 800 1000 1200 1400 1600 1800 2000 Peor 0.03 0.29 0.61 0.63 0.44 0.38 0.30 0.49 0.30 0.52 0.20 0.24 0.49 0.04 0.27 0.55 0.73 1.46 1.14 1.52 1.82 2.28 0.000 3.03 0.000 0.000 S ELEC T 350 300 250 200 T IEM PO (/ 1 0 0 ) 150 100 50 0 10 50 100 200 400 600 800 TAM AÑO 1000 1200 1400 1600 1800 2000