Páginas

viernes, 2 de noviembre de 2012

      BUSQUEDA BINARIA DE UN VECTOR.

La búsqueda binaria al igual que otros algoritmos como el quicksort utiliza la técnica divide y vencerás. Uno de los requisitos antes de ejecutar la búsqueda binaria, es que el conjunto de elementos debe de estar ordenado. 

Supongamos que tenemos el siguiente array:
57 53 21 37 17 36 22 3 44 97 89 26 31 47 8 17

Debemos ordenarlo:
3 8 17 17 21 22 26 31 36 37 44 47 53 57 89 97


Necesitamos una seria de datos para realizar la búsqueda: El elemento en la posición inicio, fin, medio. Y porsupuesto el tamaño del vector y elemento que queremos buscar.

inicio = 0;
fin = tam – 1;
medio = (inicio + fin) / 2;


 A continuacion el codigo:

/*
HECHO POR:
ING.SAUL VALECILLOS C.I:21151142.
*/

#include<iostream>

using namespace std;

int busqueda_binaria(int *array, int clave, int tamaño=10)
    {
        int medio, inicio, fin;
        inicio = 0;
        fin = tamaño-1;
   
        while(inicio <= fin){
          medio = (inicio + fin) / 2;
     

 /*Preguntamos si el elemento buscado es igual al elemento que se encuentra en la posicion medio del array, si es afirmativo ya encontramos el elemento y no hay nada más que hacer.*/ 
  if(clave == array[medio]){
            cout << "Se encuentra en la posicion " << medio + 1 << endl;
            return array[medio];
          } 

 /*Si no es así. Preguntamos si el elemento que se encuentra en la posición medio es mayor al elemento buscado, si es afirmativo y como el array está ordenado, quiere decir que elemento buscado es menor al del medio. Entonces ahora solo buscaríamos en esa división del array,
por lo tanto, el fin ahora sería el elemento anterior al medio.*/

               else{
              if(array[medio] > clave){
                fin= medio - 1;
              } 

 /*De lo contrario quiere decir que elemento buscado es mayor al del medio, entonces debemos buscar en la otra división del array, por lo tanto el inicio sería el elemento posterior al medio.*/
             else {
            inicio = medio + 1;
              }
          }
        }
        return -1;
}
int main()
{
    int i,j,cambio,clave, array[10]={9,81,54,63,87,41,36,78,99,12},tamaño=10;

    cout<<"La tabla desordenada:"<<endl;

    for( i=0;i<=6;i++){
           cout<<array[i]<<endl;          
                      }
    for(i=0;i<=6;i++){
        for(j=i;j<=6;j++){
                        
            if(array[i]>array[j]){

                cambio=array[i];
                array[i]=array[j];
                array[j]=cambio;
            }
        }
    }   
    cout<<"\nLa tabla ordenada:"<<endl;
    for(i=0;i<=6;i++){     
      cout<<array[i]<<endl;
    }
cout<<"Ingrese el valor que desea buscar"<<endl;
cin>>clave;
busqueda_binaria(array,clave,tamaño=10);


    system("pause");
    return 0;
}

El programa ya compilado:















4 comentarios: