Algoritmo, WTF!

Iniciado por Shell Root, 24 Mayo 2011, 16:15 PM

0 Miembros y 2 Visitantes están viendo este tema.

Shell Root

En clase de programación, nos explicaron algunos métodos para ordenar elementos y uno de estos fue el siguiente: -No lo terminamos porque no sabíamos como realmente era-

Suponiendo que tengo el siguiente vector: 1,3,5,10,20 y quiero ingresar el número 22.
Además de que las variables:
 TV = TotalValores, que en este casi son 5.
 A = vector
 VALIN = Valor a ingresar
No logro entender como hacerlo,...

Código (php) [Seleccionar]
PROCEDIMIENTO insertar_ordenado( TV, A, VALIN )
 l = 1
 MIENTRAS ( l <= TV ) && ( VALIN > A[l] )
   l = l + 1
 FIN MIENTRAS

 TV = TV + 1

 PARA K = TV; l + 1; -1 HACER
   A[k] = A[k-1]
 FIN PARA

 A[l] = VALIN

FIN
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

pucheto

No es un algoritmo de ordenamiento...
Es un algoritmo para insertar ordenado en un vector.

*Busca la posicion donde va a meter a 'VALIN' (justo detras del primer elemento mayor q VALIN, los anteriores son menores q VALIN).
*Agranda el vector en 1.
*Corre todos los elementos mayores que VALIN 1 posicion hacia adelante.
*Inserta VALIN en la posicion que le corresponde.

Shell Root

Tienes razón XD

Pero, a ver... Hago hasta donde terminar el primer MIENTRAS, incremento la variable TV y ya me pierdo...
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul338

busca sobre insertion sort. Lo que hace es a una matriz ordenada, buscar su lugar, hacerle un "espacio" moviendo todos los elementos restantes....
Y poniendo el elem en su lugar

Shell Root

Sí eso lo sé, tampoco soy tan principiante.
Pero mi duda es, si el elemento que ingreso DEBE ser el último, porque mueve los otros elementos?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

raul338

Si es el ultimo, tecnicamente L deberia ser mayor a TV y ni entraria al bucle, simplemente lo agregaria :)

Shell Root

Pero a ver, supongamos que tenemos este vector
Código (php) [Seleccionar]
1,3,5,8,11

Ahora antes del primer ciclo, las variables quedan así,
Código (php) [Seleccionar]
l TV VALIN
1 5 12


Cuando se entra en el ciclo, finalmente quedan así,
Código (php) [Seleccionar]
l TV VALIN
1 5 12
2
3
4
5
6


Hasta aquí, vamos bien, ahora incrementó la variable TV en 1,
Código (php) [Seleccionar]
TV = 6

Aquí es donde me pierdo, entra el ciclo con las siguientes valores,
Código (php) [Seleccionar]
PARA K = TV; l + 1; -1 HACER
PARA 6; 7; -1 HACER


Se supone que debe de ingresar al vector, y decrementar 7 a 6, aquí es donde pararía?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

dakomt

#7
Cita de: Shell Root en 25 Mayo 2011, 05:38 AM


Aquí es donde me pierdo, entra el ciclo con las siguientes valores,
Código (php) [Seleccionar]
PARA K = TV; l + 1; -1 HACER
PARA 6; 7; -1 HACER


Se supone que debe de ingresar al vector, y decrementar 7 a 6, aquí es donde pararía?

No exactamente. en ese bucle l+1 es una constante, no se decrementará nunca. El valor que se va decrementando es K. Es decir Ahora K vale 6... lo vamos decrementando hasta que  K = l +1, es decir, mientras K >= l +1.

Pero como K < l +1 la condición no se cumple y ese bucle no llega a ejecutar ninguna iteración.