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,...
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
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.
Tienes razón XD
Pero, a ver... Hago hasta donde terminar el primer MIENTRAS, incremento la variable TV y ya me pierdo...
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
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?
Si es el ultimo, tecnicamente L deberia ser mayor a TV y ni entraria al bucle, simplemente lo agregaria :)
Pero a ver, supongamos que tenemos este vector
1,3,5,8,11
Ahora antes del primer ciclo, las variables quedan así,
l TV VALIN
1 5 12
Cuando se entra en el ciclo, finalmente quedan así,
l TV VALIN
1 5 12
2
3
4
5
6
Hasta aquí, vamos bien, ahora incrementó la variable TV en 1,
TV = 6
Aquí es donde me pierdo, entra el ciclo con las siguientes valores,
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?
Cita de: Shell Root en 25 Mayo 2011, 05:38 AM
Aquí es donde me pierdo, entra el ciclo con las siguientes valores,
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.