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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

MIGUEL Á. TOLEDO MARTÍNEZ<br />

{<br />

j = i; // Localiza el primer elemento del arreglo no clasificado<br />

while((j > 0) && (A[j] < A[j – 1]))<br />

{<br />

interCambio(A[j], A[j – 1]);<br />

--j; // Hace que j siga al elemento insertado<br />

} // Final del while interno<br />

++i; // Hace que i localice el primer elemento de la parte no<br />

clasificada.<br />

} // Fin del while externo<br />

} // Fin de clasifPorInser()<br />

En este caso se pueden ver dos funciones codificadas en C++. Recuerde que el algoritmo clasifPorInser()<br />

requiere una operación de intercambio. Para llevar a cabo esta tarea se ha codificado una función llamada<br />

interCambio() Observe que esta función tiene dos parámetros de referencia que son caracteres. De esta<br />

manera, la función recibe dos caracteres que se intercambian utilizando la variable local temporal (temp)<br />

dentro de la función. Los caracteres de intercambio se envían de regreso al programa llamador por medio de<br />

los parámetros de referencia. Desde luego, el programa llamador será la función clasifPorInser()<br />

El código de clasifPorInser() debe ser directo a partir del algoritmo que se analizó. Estudie el código y<br />

compárelo con el algoritmo. Encontrará que son idénticos desde un punto de vista lógico y estructural.<br />

Debe notar cómo se llama a la función intercambio() dentro de clasifPorInser() Los elementos del arreglo<br />

A[j] y A[j – 1] se pasan a la función. Estos elementos son caracteres sencillos, ¿correcto? Por lo tanto, la<br />

función recibe dos caracteres y los intercambia. Los caracteres respectivos en el arreglo reflejan la<br />

operación de intercambio, porque intercambio() emplea parámetros de referencia.<br />

SOLUCIÓN <strong>DE</strong> PROBLEMAS EN ACCIÓN: Búsqueda en un arreglo con recursión<br />

(Búsqueda binaria)<br />

PROBLEMA<br />

En este problema desarrollaremos otro popular algoritmo de búsqueda, llamado búsqueda binaria. El<br />

algoritmo de búsqueda binaria que desarrollaremos empleará recursividad, aunque también se puede hacer<br />

utilizando iteración. Una de las principales diferencias entre búsqueda binaria y búsqueda secuencial es que<br />

la primera requiere que el arreglo se ordene antes de la búsqueda, mientras que la segunda no tiene este<br />

requerimiento. Sin embargo, si va a empezar con un arreglo ordenado, la búsqueda binaria es mucho más<br />

rápida que la secuencial, especialmente para arreglos grandes. Por ejemplo, si fuera a aplicar una búsqueda<br />

secuencia a un arreglo de 1000 enteros, el algoritmo de búsqueda secuencial hará un promedio de 500<br />

comparaciones para encontrar el elemento deseado. Peor aún, si el elemento deseado está en la última<br />

posición del arreglo, la búsqueda secuencial hará mil comparaciones para encontrar el elemento. Por otra<br />

parte, la búsqueda binaria requerirá un máximo de 10 comparaciones para encontrar el elemento, ¡aún si<br />

está en la última posición del arreglo! Desde luego, se debe pagar un precio por esta mayor eficiencia. El<br />

precio que se paga es un algoritmo más complejo. Por lo tanto, cuando busque en un arreglo ordenado, la<br />

ventaja de la búsqueda secuencial es simplicidad, mientras que la ventaja de la búsqueda binaria es<br />

eficiencia.<br />

Desarrolle una función en C++ que se pueda llamar para buscar en un arreglo ordenado de enteros un<br />

elemento con determinado valor y que regrese el índice del elemento si se encuentra en el arreglo. Utilice<br />

una búsqueda binaria recursiva para realizar esta tarea.<br />

Se desarrollará una función en C++, así la definición del problema se enfocará de nuevo a la interfaz de la<br />

función. Sin embargo, antes de considerar la interfaz de la función, veamos cómo funciona una búsqueda<br />

binaria recursiva, porque el algoritmo de búsqueda dictará los parámetros de la función. Por lo tanto,<br />

primero trataremos el algoritmo y después desarrollaremos la interfaz de la función.<br />

ARREGLOS, APUNTADORES Y ESTRUCTURAS – <strong>LECCIÓN</strong> <strong>18</strong> <strong>18</strong>-51

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

Saved successfully!

Ooh no, something went wrong!