Búsqueda binaria dentro de un arreglo
#include <stdio.h> #define TAMANIO 15 /* prototipos de las funciones */ int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto ); void despliegaEncabezado( void ); void despliegaLinea( const int b[], int bajo, int medio, int alto ); /* la función main comienza la ejecución del programa */ int main() { int a[ TAMANIO ]; /* crea el arreglo a */ int i; /* contador para inicializar los elementos de 0 a 14 del arreglo a */ int llave; /* valor a localizar en el arreglo a */ int resultado; /* variable para almacenar la ubicación de la llave o -1 */ /* crea los datos */ for ( i = 0; i < TAMANIO; i++ ) { a[ i ] = 2 * i; } /* fin de for */ printf( "Introduzca un numero entre 0 y 28: " ); scanf( "%d", &llave ); despliegaEncabezado(); /* busca la llave en el arreglo a */ resultado = busquedaBinaria( a, llave, 0, TAMANIO - 1 ); /* despliega los resultados */ if ( resultado != -1 ) { printf( "n%d se encuentra en el elemento %d del arreglon", llave, resultado ); } /* fin de if */ else { printf( "n%d no se encuentran", llave ); } /* fin de else */ return 0; /* indica terminación exitosa */ } /* fin de main */ /* función para realizar la búsqueda binaria en un arreglo */ int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto ) { int central; /* variable para mantener el elemento central del arreglo */ /* realiza el ciclo hasta que el subÃÂnice bajo es mayor que el subÃÂndice alto */ while ( bajo <= alto ) { /* determina el elemento central del subarreglo en el que se busca */ central = ( bajo + alto ) / 2; /* despliega el subarreglo utilizado en este ciclo */ despliegaLinea( b, bajo, central, alto ); /* si claveDeBusqueda coincide con el elemento central, devuelve central */ if ( claveDeBusqueda == b[ central ] ) { return central; } /* fin de if */ /* si claveDeBusqueda es menor que el elemento central, establece el nuevo valor de alto */ else if ( claveDeBusqueda < b[ central ] ) { alto = central - 1; /* busca en la mitad inferior del arreglosearch low end of array */ } /* fin de else if */ /* si claveDeBusqueda es mayor que el elemento central, establece el nuevo valor para bajo */ else { bajo = central + 1; /* busca en la mitad superior del arreglo */ } /* fin de else */ } /* fin de while */ return -1; /* no se encontró claveDeBusqueda */ } /* fin de la funcipon busquedaBinaria */ /* Imprime un encabezado para la salida */ void despliegaEncabezado( void ) { int i; /* contador */ printf( "nSubindices:n" ); /* muestra el encabezado de la columna */ for ( i = 0; i < TAMANIO; i++ ) { printf( "%3d ", i ); } /* fin de for */ printf( "n" ); /* comienza la nueva lÃÂnea de salida */ /* muestra una lÃÂnea de caracteres - */ for ( i = 1; i <= 4 * TAMANIO; i++ ) { printf( "-" ); } /* fin de for */ printf( "n" ); /* inicia una nueva lÃÂnea de salida */ } /* fin de la función despliegaEncabezado */ /* Imprime una lÃÂnea de salida que muestra la parte actual del arreglo que se esta procesando. */ void despliegaLinea( const int b[], int baj, int cen, int alt ) { int i; /* contador para la iteración a través del arreglo b */ /* ciclo a través del arreglo completo */ for ( i = 0; i < TAMANIO; i++ ) { /* despliega espacios si se encuentra fuera del rango actual del subarreglo */ if ( i < baj || i > alt ) { printf( " " ); } /* fin de if */ else if ( i == cen ) { /* despliega el elemento central */ printf( "%3d*", b[ i ] ); /* marca el valor central */ } /* fin de else if */ else { /* despliega otros elementos en el subarreglo */ printf( "%3d ", b[ i ] ); } /* fin de else */ } /* fin de for */ printf( "n" ); /* inicia la nueva lÃÂnea de salida */ } /* fin de la función despliegaLinea */
Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por personas con únicamente conocimiento básico del lenguaje, no de programación.
Otro punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:
- Si es lenguaje C [c]Código en C[/c]
- Si es lenguaje Pascal [pascal]Aquí dentro el código de Pascal[/pascal].
De esta manera el código coloreas el código.
Otro punto importante para muchos que sienten que se les ignora: Todos los comentarios los reviso y en su debido momento los apruebo, pero ojo con el con lo siguiente:Me reservo el derecho de alterar, publicar o no los comentarios as´ como cambiar mis condiciones en el momento que así lo requiera.
¿estas de acuerdo? entonces adelante que ya te he quitado bastante tiempo leyendo esta basura de advertencias :)