CONTENIDO DE LA LECCIÓN 18
CONTENIDO DE LA LECCIÓN 18
CONTENIDO DE LA LECCIÓN 18
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MIGUEL Á. TOLEDO MARTÍNEZ<br />
Algoritmo clasifPorInser()<br />
clasifPorInser()<br />
INICIO<br />
Establece i = segundo índice del arreglo.<br />
mientras(i primer índice del arreglo) AND (A[j] < A[j – 1]))<br />
Inicio<br />
Intercambia A[j] y A[j – 1].<br />
Decrementa j.<br />
Fin.<br />
Incrementa i.<br />
Fin.<br />
FIN.<br />
La variable i controla el ciclo externo y j controla el ciclo interno. Observe que i empieza en el segundo<br />
índice del arreglo. ¿Por qué no en el primer índice del arreglo? Porque el primer elemento en el arreglo<br />
se clasifica siempre relativo a cualquier elemento precedente, ¿correcto? Por lo tanto, el primer paso<br />
comienza con el segundo elemento del arreglo. El primer enunciado en el ciclo externo establece a j = i. De<br />
esta manera, i y j localizan el primer elemento en la parte no clasificada del arreglo al principio de cada<br />
paso. Ahora, el ciclo interno intercambiará al elemento localizado por j, el cual es A[j], con su elemento<br />
predecesor, el cual es A[j – 1], siempre y cuando j sea mayor que el primer índice del arreglo y el elemento<br />
A[j] sea menor que el elemento A[j – 1] Una vez que se hace el intercambio, se decrementa j. Esto obliga a<br />
j a seguir siendo el elemento insertado dentro de la parte del arreglo ordenado. El intercambio continúa<br />
hasta que no hay ningún elemento que preceda al elemento A[j] que sea menor que el A[j]<br />
Una vez que se rompe el ciclo interno, el elemento A[j] se inserta en su posición correcta con relación con<br />
los elementos que le preceden. Después, se hace otro paso incrementando la variable externa para el control<br />
del ciclo i, estableciendo j a i, y ejecutando de nuevo el ciclo interno. Este proceso de ciclo anidado<br />
continúa hasta que i se incrementa más allá de la última posición del arreglo.<br />
Estudie el algoritmo anterior y compárelo con la figura <strong>18</strong>.3 hasta que esté seguro que comprende<br />
clasifPorInser() A continuación el código en C++.<br />
CODIFICACIÓN <strong>DE</strong>L PROBLEMA<br />
Hemos desarrollado la interfaz de la función clasifPorInser() En C++, el algoritmo se codifica fácilmente<br />
como una función semejante a ésta:<br />
// Función de intercambio()<br />
void interCambio(char &x, char &y)<br />
{<br />
char temp; // Crea una variable temporal<br />
temp = x;<br />
x = y;<br />
y = temp;<br />
} // Fin de interCambio()<br />
// Función clasificación por inserción<br />
void clasifPorInser(char A[MAX])<br />
{<br />
int i; // Variable que controla el ciclo exterior<br />
int j; // Variable que controla el ciclo interior<br />
i = 1; // Establece i al índice del segundo elemento<br />
while(i < MAX)<br />
ARREGLOS, APUNTADORES Y ESTRUCTURAS – <strong>LECCIÓN</strong> <strong>18</strong> <strong>18</strong>-50