Para empezar, os muestro algo sencillito como es realizar una búsqueda binaria y terciaria en un vector por el método de Divide y Vence, el lenguaje empleado para este algoritmo es C. Espero que os sea útil! Como veréis primero hay que introducir el vector y ordenarlo, después en el main comentas el método de búsqueda que quieras emplear y listo!
#include <cstdlib>
#include <iostream>
#define max 100
using namespace std;
void introducirVector(float A[max],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<" A["<<i+1<<"]=";
cin>>A[i];
}
cout<<endl;
}
void mostrarVector(float V[max],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<< V[i]<<"\t";
}
cout<<endl<<endl;
}
//Con este método ordenaremos el vector previamente a la búsqueda//
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];
for(j=i+1;j<n;j++)
{ if(V[j]<temp) //Intercambio
{ k=j;
temp=V[j];
}
}
V[k]=V[i] ;
V[i]=temp;
}
}
//Busqueda de un elemento en el vector//
int busquedaBinaria(float V[max],int n ,int dato)
{
int mitad,izq,der;
izq=0;
der=n-1;
while(izq<=der)
{mitad=(izq+der)/2;//elemento central del vector para dividirlo
if(dato>V[mitad])
izq=mitad+1;
else if(dato<V[mitad])
der=mitad-1;
else return mitad;
}
return -1;//En caso de que no se encuentre
}
int busquedaTerciaria(float V[max],int prim, int n ,int dato)
{
int izq,der,nterc;
izq=prim;
der=n;
cout<<"0izq vale"<<izq<<endl;
cout<<"0der vale"<<der<<endl;
if (izq>=der){
V[der]=dato;
return der;
}
nterc=(der-izq+1)/3;//dividimos por un tercio
cout<<"nterc vale"<<nterc<<endl;
cout<<"dato vale"<<dato<<endl;
system("pause");
if(dato==V[nterc]){
return nterc; }
else if(dato<V[nterc]){
cout<<"1izq vale"<<izq<<endl;
cout<<"1der vale"<<der<<endl;
busquedaTerciaria(V,izq,nterc,dato);
}
else if(dato==V[der-nterc])
return der-nterc;
else if(dato<V[der-nterc]){
cout<<"2izq vale"<<izq<<endl;
cout<<"2der vale"<<der<<endl;
busquedaTerciaria(V,izq+nterc+1,der-nterc-1,dato);
}
else
cout<<"3izq vale"<<izq<<endl;
cout<<"3der vale"<<der<<endl;
busquedaTerciaria(V,der-nterc+1,der,dato);
}
int main(int argc, char *argv[])
{
float A[max];
int n,p=0,dato;
int pos;
cout<<"Introduce el número de elementos del vector :";
cin>>n;
introducirVector(A,n);
cout<<"El vector introducido es:"<<endl;
mostrarVector(A,n);
ordenarSeleccion(A,n);
cout<<"El vector ordenado:"<<endl;
mostrarVector(A,n);
cout<<"Introduzca el número a buscar:";
cin>>dato;
pos=busquedaTerciaria(A,1,n,dato);
//pos=busquedaBinaria(A,n,dato);
{ if(pos ==-1)
cout<<"el dato no esta en el vector"<<endl;
else
cout<<"El número se encontro en la posicion:"<<pos +1<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
No hay comentarios:
Publicar un comentario