Busqueda binaria dentro de un arreglo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | #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 */ |
¿Has encontrado algún error? ¿Tienes la solución? Dejame tu correción ;-)
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 <code lang="c">Código en C</code>
- Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.
De esta manera el código coloreas el código.
Otro punto importante para muchos que crees que te he ignorado: 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 también cambiar mis condiciones en el momento que yo lo requiera.
¿Si estas de acuerdo? Adelante! que ya te he quitado bastante tiempo leyendo esta basura :)