La búsqueda es una operación que tiene por objeto la localización de un elemento dentro de la estructura de datos (arreglo). A menudo un programador estará trabajando con grandes cantidades de datos almacenados en arreglos y pudiera resultar necesario determinar si un arreglo contiene un valor que coincide con algún valor clave o buscado.
Este algoritmo compara uno a uno los elementos del arreglo hasta recorrerlo por completo indicando si el número buscado existe.
Su implementación es la siguiente:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define TAM 10 void main() { int a[TAM], temp, i, j, num; randomize(); //Inicializa el generador de numeros aleatorios printf ("Llenando arreglo con números aleatorios\n"); for (i=0; i< TAM; i++) a[i]=random(100); printf ("Numero a buscar? "); scanf ("%d", &num); for (i=0; i< TAM; i++) if (a[i] == num){ printf ("\nValor encontrado"); printf ("\nPosicion: %d", i); } else printf ("\nNo existe"); printf ("El arreglo era:\n"); for (i=0; i< TAM; i++) printf ("%d ", a[i]); getch(); }
Este algoritmo permite buscar de una manera más eficiente un dato dentro de un arreglo, para hacer esto se determina el elemento central del arreglo y se compara con el valor que se esta buscando, si coincide termina la búsqueda y en caso de no ser así se determina si el dato es mayor o menor que el elemento central, de esta forma se elimina una mitad del arreglo junto con el elemento central para repetir el proceso hasta encontrarlo o tener solo un elemento en el arreglo.
Para poder aplicar este algoritmo se requiere que el arreglo este ordenado. Su implementación es la siguiente:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #define TAM 15 void main(){ int a[TAM], busca, temp, bajo, alto, central; printf("Llenando el arreglo con números aleatorios\n"); randomize(); //Inicializa el generador de aleatorios for (int i=0; i< TAM; i++) a[i]=random(100); //Implementacion de Ordenamiento por burbuja de menor a mayor printf ("Ordenando arreglo...\n"); for (int j=1; j <= TAM; j++) for (i=0; i< TAM-1; i++) if (a[i] > a[i+1]){ temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; } //Implementacion de busqueda binaria printf ("\nIntroduce un numero a buscar: "); scanf ("%d", &busca); bajo = 0; alto = TAM-1; central = (bajo+alto)/2; while (bajo < alto && busca != a[central]){ if(busca > a[central]) bajo = central+1; else alto = central-1; central=(bajo+alto)/2; } if (busca == a[central]) printf("\n%d encontrado en posicion %d", busca, central); else printf("\n%d no existe", busca); printf ("\n\nEl arreglo ordenado era\n\n"); for (i=0; i< TAM; i++) printf ("%d ", a[i]); getch(); }