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