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