Función Partición

Anuncio
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
Descargar