06.05.2013 Views

CONTENIDO DE LA LECCIÓN 18

CONTENIDO DE LA LECCIÓN 18

CONTENIDO DE LA LECCIÓN 18

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!