Sunteți pe pagina 1din 4

Ejercicios de ordenacin

Ejercicio 1

A continuacin se muestra una implementacin del algoritmo de ordenacin por insercin
donde junto a cada sentencia aparece su tiempo de ejecucin.

for i in A'First+1..A'Last loop ---- 3
valor := A(i); ---- 2
j := i - 1; ---- 2
while (j>=AFirst) and then (A(j)>valor) loop ---- 4
A (j+1) := A (j); ---- 4
j := j - 1; ---- 2
end loop;
A(j+1) := valor; ---- 3
end loop;

Las unidades en que se expresa el tiempo dependern de la plataforma de ejecucin y
para nosotros no tienen mayor importancia. Por simplificar, supondremos que la sentencia
while siempre tarda lo mismo independientemente del nmero de condiciones que evale.

1) Razonar las siguientes cuestiones:
a) Se realiza ordenacin in situ?
b) Es natural?
c) Es estable?
2) Para el caso mejor indicar:
a) En qu circunstancias se producira.
b) El tiempo de ejecucin.
c) El orden de complejidad.
3) Para el caso peor indicar:
a) En qu circunstancias se producira.
b) El tiempo de ejecucin.
c) El orden de complejidad.
4) Para el caso medio indicar:
a) En qu circunstancias se producira.
b) El tiempo de ejecucin.
c) El orden de complejidad.





Ejercicio 2

Dado el procedimiento de ordenacin siguiente:

procedure ordenar (A: in out vector; i: in Natural) is
v: Natural;
min: Positive;
begin
if i < A'last then
min := i;
for j in i+1..A'last loop
if A(j) < A(min) then
min := j;
end if;
end loop;
v := A(i);
A(i) := A(min);
A(min) := v;
ordenar (A, i+1);
end if;
end ordenar;

1) Indicar a qu mtodo de ordenacin se parece.
2) Obtener una expresin que indique el nmero de veces que se ejecuta el cuerpo
del bucle for en funcin del nmero de elementos a ordenar.
3) Indicar el orden de complejidad de la expresin calculada.


















Ejercicio 3

Dado el procedimiento de ordenacin siguiente:

procedure ordenar_a_voleo (A: in out vector) is
begin
loop
reorganizar (A);
exit when ordenado(A);
end loop;
end ordenar_a_voleo;

La funcin ordenado comprueba si el array est ordenado. Por su parte, reorganizar
recoloca los elementos del vector con el nico requisito de no repetir disposiciones
anteriores.

1) Escribir la funcin ordenado.
2) Cul ser el orden de complejidad de ordenado?
3) Cuantas veces se ejecutar reorganizar en el caso ms favorable?
4) Se puede modificar el cdigo para mejorar el caso anterior?
5) Suponiendo que la complejidad de reorganizar no es superior a la de ordenado,
cul ser la complejidad del mtodo de ordenacin en el caso ms desfavorable?




















Ejercicio 4

Dado el procedimiento de ordenacin siguiente:

procedure ordenar (A: in out vector) is
v: Natural;
j: Natural;
begin
j := 1;
loop
j := j + 1;
if A(j) < A(j-1) then
v := A(j-1);
A(j-1) := A(j);
A(j) := v;
j := 1;
end if;
exit when j = A'last;
end loop;
end ordenar;

1) Indicar si el procedimiento es:
a) Correcto.
b) Estable.
c) Natural.
d) In situ.
2) Indicar a qu algoritmo de ordenacin se parece, poniendo de manifiesto las
diferencias.
3) Indicar en qu circunstancias se dan el mejor y el peor de los casos.
4) Para el peor de los casos indicar cuantas veces es necesario intercambiar el
elemento A(Afirst) para llevarlo a la posicin Alast.
5) Calcular cuantas veces se ejecutan las sentencias que intercambian dos nmeros
del vector para el mejor de los casos.

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