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 />

{<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!