/* +----------------------------------------+ | BUSQUEDA BINARIA (BUSQUEDA DICOTOMICA) | +----------------------------------------+ En este programa se realiza una búsqueda binaria (llamada también dicotómica) en un vector ordenado de números enteros. Este algoritmo es válido exclusivamente para vectores ordenados y consiste en comparar en primer lugar con la componente central del vector, y si no es igual al valor buscado se reduce el intervalo de búsqueda a la mitad derecha o izquierda según donde pueda encontrarse el valor a buscar. El algoritmo termina si se encuentra el valor buscado o si el tamaño del intervalo de búsqueda queda anulado. En los casos en que existan repeticiones en el vector, del valor buscado, este algoritmo obtendrá uno de ellos aleatoriamente según los lugares que ocupen, los cuales necesariamente son consecutivos. */ #include <stdio.h> /* printf (), getchar () */ void main (void) { int vector [100]; /* declaración de un vector de 100 elementos int */ int x, /* contiene valor a buscar */ encontrado, /* variable que sólo toma dos valores: cierto (1) o falso (0) */ i, centro, izquierda, derecha; /* índices de vector */ /* Escritura de la cabecera. */ printf ("BUSQUEDA BINARIA EN UN VECTOR ORDENADO:"); /* Relleno aleatorio de los 100 componentes del vector. A cada componente se le asigna un valor equivalente al doble del índice que ocupan en el vector. A la variable x se le asigna arbitrariamente la mitad de lo que vale la variable i al salir del bucle. */ for (i = 0; i <= 99; i++) vector[i] = i * 2; x = i / 2; /* Escritura en pantalla del vector ordenado y valor a buscar. */ printf ("\n\nVector:\n"); for (i = 0; i < 100; i++) printf ("%d\t", vector[i]); printf ("\nValor a buscar: %d", x); /* Búsqueda binaria en vector ordenado. */ encontrado = 0; izquierda = 0; derecha = 99; while (! encontrado && izquierda <= derecha) { centro = (izquierda + derecha) / 2; if (x < vector[centro]) derecha = centro - 1; else if (x > vector[centro]) izquierda = centro + 1; else encontrado = 1; } /* Escritura en pantalla del vector ordenado. */ if (encontrado) printf ("\n\nValor %d encontrado en índice %d (recordar que" " empieza en 0).", x, centro); else printf ("\n\nNo existe el valor %d en el vector.", x); /* Espera la pulsación de la tecla RETURN para finalizar el programa. */ getch (); }