Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Mensaje iniciado por: Shell Root en 24 Mayo 2011, 16:15 PM

Título: Algoritmo, WTF!
Publicado por: Shell Root en 24 Mayo 2011, 16:15 PM
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
Título: Re: Algoritmo de ordenamiento, WTF!
Publicado por: pucheto en 24 Mayo 2011, 16:27 PM
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.
Título: Algoritmo, WTF!
Publicado por: Shell Root en 24 Mayo 2011, 17:07 PM
Tienes razón XD

Pero, a ver... Hago hasta donde terminar el primer MIENTRAS, incremento la variable TV y ya me pierdo...
Título: Re: Algoritmo, WTF!
Publicado por: raul338 en 24 Mayo 2011, 20:29 PM
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
Título: Re: Algoritmo, WTF!
Publicado por: Shell Root en 24 Mayo 2011, 23:59 PM
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?
Título: Re: Algoritmo, WTF!
Publicado por: raul338 en 25 Mayo 2011, 00:22 AM
Si es el ultimo, tecnicamente L deberia ser mayor a TV y ni entraria al bucle, simplemente lo agregaria :)
Título: Re: Algoritmo, WTF!
Publicado por: Shell Root en 25 Mayo 2011, 05:38 AM
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?
Título: Re: Algoritmo, WTF!
Publicado por: dakomt en 27 Mayo 2011, 01:17 AM
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.