domingo, 21 de abril de 2013

Este es el código de la práctica 12 Método de búsqueda Binaria

#include<iostream.h>
#include<conio.h>
#define max 50 //este valor depende del usuario

void ingresarArreglo(float A[max],int n)
{ int i;
  for(i=0;i<n;i++)
  { cout<<"A["<<i+1<<"]=";
    cin>>A[i];
  }
  cout<<endl;
}
void reportarVector(float V[max],int n)
{ int i;
  for(i=0;i<n;i++)//recorre el arreglo
  { cout<<V[i]<<" ";
  }
  cout<<endl;
}
//función de ordenación por el método de selección
void ordenarSeleccion(float V[max],int n)
{  int i,j,k;
   float temp;
    for(i=0;i<n-1;i++)
    {  k=i;
       temp=V[i];//el primer valor del arreglo lo asignamos a un temporal
//para luego compararlo con los demás valores del arreglo hasta encontrar el menor valor
       for(j=i+1;j<n;j++)
       { if(V[j]<temp)//si encontramos un valor que sea menor que el primer valor del arreglo (temp)
//entonces intercambiamos de posición,los mismos pasos se repetirán hasta que arreglo sea ordenado completamente
{ k=j;
  temp=V[j];
}
       }
       V[k]=V[i];
       V[i]=temp;
    }
}
//funcion de busqueda binaria,solo funciona para arreglos ordenados
int busquedaBinaria(float V[max],int n ,int dato)
{ int mitad,izq,der;
  izq=0;
  der=n-1;
  while(izq<=der)//el elemento que esta ala izquierda debe de ser menor que el de la derecha
  { mitad=(izq+der)/2;//calculamos el elemento central del arreglo hasta encontrar el valor buscado
    if(dato>V[mitad])//si el elemento buscado es mayor que el centro entonces buscamos en la segunda mitad del arreglo
     izq=mitad+1;//el primer valor del arreglo pasa hacer la mitad mas 1
    else if(dato<V[mitad])//si el elemento buscado buscado es menor que la mitad entonces buscamos en la primera mitad del arreglo
     der=mitad-1;
    else
     return mitad; //retornamos el elemento encontrado
  }
  return -1;//el elemento no existe en el arreglo
}

void main()
{  float A[max];
   int n,dato;
   int pos;
   clrscr();
   cout<<"Ingrese numero de elementos: ";
   cin>>n;
   ingresarArreglo(A,n);
   cout<<"Vector ingresado"<<endl;
   reportarVector(A,n);
   cout<<endl;
   ordenarSeleccion(A,n);
   cout<<"El vector ordenado: "<<endl;
   reportarVector(A,n);
   cout<<endl;
   cout<<"Ingrese numero a buscar: ";
   cin>>dato;
   pos=busquedaBinaria(A,n,dato);
   {  if(pos==-1)
cout<<"El dato no esta en el arreglo"<<endl;
      else
cout<<"El dato se encontro en la posicion: "<<pos+1<<endl; //Se imprime la posición del elemento
   }                                                                                                //encontrado
   getch();
}

No hay comentarios.:

Publicar un comentario