Métodos de búsqueda.

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.

búsqueda secuencial

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(); 
    }		
			

Búsqueda binaria

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();
    }
            

Seguir a paginadeC en Twitter Foro de Página de C ¡CSS Válido!