CONTENIDO DE LA LECCIÓN 18

CONTENIDO DE LA LECCIÓN 18 CONTENIDO DE LA LECCIÓN 18

azul2.bnct.ipn.mx
from azul2.bnct.ipn.mx More from this publisher
06.05.2013 Views

MIGUEL Á. TOLEDO MARTÍNEZ búsqueda binaria de cualquier arreglo ordenado puede determinarse encontrando la primera potencia de 2 mayor que el número de elementos del arreglo. Ejemplo 18.34 El siguiente programa, BUSBIN.CPP, presenta la versión iterativa de la función busquedaBinaria() La función recibe cuatro argumentos: un arreglo de enteros b, un entero claveBusqueda, el índice bajo del arreglo y el índice alto del arreglo. Si la clave de búsqueda no es igual al elemento de la mitad de un subarreglo, se ajusta el índice bajo o alto para poder hacer la búsqueda en un subarreglo más pequeño. Si la clave de búsqueda es menor que el elemento central, el índice alto se establece a mitad – 1 y se continúa la búsqueda en los elementos de bajo a mitad – 1. Si la clave de búsqueda es mayor que el elemento central, el índice bajo se establece a mitad + 1 y se continúa la búsqueda en los elementos de mitad + 1 a alto. El programa emplea un arreglo de 15 elementos. La primera potencia de 2 mayor que la cantidad de elementos de este arreglo es 16 (2 4 ), por lo que se necesitan un máximo de 4 comparaciones para encontrar la clave de búsqueda. La función imprimirEncabezado() envía a la salida los índices del arreglo y la función imprimirFila() envía a la salida cada subarreglo generado durante el proceso de búsqueda binaria. El elemento central de cada subarreglo se marca con un asterisco (*), para indicar el elemento con el que se compara la clave de búsqueda. /* El siguiente programa: BUSBIN.CPP, ilustra el uso de la búsqueda binaria en un arreglo. */ #include //Para cout y cin #include //Para setw() int busquedaBinaria(int[], int, int, int, int); void imprimirEncabezado(int); void imprimirFila(int[], int, int, int, int); void main(void) { const int TAMANO_ARREGLO = 15; int a[TAMANO_ARREGLO], clave, resultado; for(int i = 0; i < TAMANO_ARREGLO; i++) a[i] = 2 * i; //Crea los elementos del arreglo cout > clave; imprimirEncabezado(TAMANO_ARREGLO); resultado = busquedaBinaria(a, clave, 0, TAMANO_ARREGLO - 1, TAMANO_ARREGLO); if(resultado != -1) cout

MIGUEL Á. TOLEDO MARTÍNEZ Ejemplo 18.35 { mitad = (bajo + alto) / 2; imprimirFila(b, bajo, mitad, alto, tamano); if(claveBusqueda == b[mitad]) //coincidencia return mitad; else if(claveBusqueda < b[mitad]) alto = mitad - 1; //Busca en la parte baja del arreglo else bajo = mitad + 1; //Busca en la parte alta del arreglo }//Fin de while return -1; //No se encontró claveBusqueda }//Fin de busquedaBinaria() //Imprime el encabezado para la salida void imprimirEncabezado(int tamano) { cout

MIGUEL Á. TOLEDO MARTÍNEZ<br />

Ejemplo <strong>18</strong>.35<br />

{<br />

mitad = (bajo + alto) / 2;<br />

imprimirFila(b, bajo, mitad, alto, tamano);<br />

if(claveBusqueda == b[mitad]) //coincidencia<br />

return mitad;<br />

else if(claveBusqueda < b[mitad])<br />

alto = mitad - 1; //Busca en la parte baja del arreglo<br />

else<br />

bajo = mitad + 1; //Busca en la parte alta del arreglo<br />

}//Fin de while<br />

return -1; //No se encontró claveBusqueda<br />

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

//Imprime el encabezado para la salida<br />

void imprimirEncabezado(int tamano)<br />

{<br />

cout

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

Saved successfully!

Ooh no, something went wrong!