Está en la página 1de 5

Mtodos de Bsqueda C++

Fichero metodosbusqueda.h
#ifndef METODOSBUSQUEDA_H
#define METODOSBUSQUEDA_H
#include <iostream>
using namespace std;
class MetodosBusqueda
{
private:
int tamano;
string* Vector;
void limpiar();
public:
MetodosBusqueda();
virtual ~MetodosBusqueda();
void setTamano(int N);
int getTamano();
void setVector(int p, string ve);
string getVector(int p);
//Declaracin del mtodo que retorna la posicin del dato buscado, utilizando el mtodo de bsqueda lineal o
//secuencial este mtodo recibe como parmetro el dato que se desea buscar dentro del arreglo.
int busquedaLineal(string dato);
void ordenarIntercambio();
//Declaracin del mtodo que retorna la posicin del dato buscado, utilizando el mtodo de bsqueda binaria
//el mtodo recibe como parmetro el dato que se desea buscar dentro del arreglo.
int bsuquedaBinaria(string dato);
};
#endif // METODOSBUSQUEDA_H

Fichero metodosbusqueda.cpp
#include "metodosbusqueda.h"
#include <iostream>
using namespace std;
MetodosBusqueda::MetodosBusqueda()
{
tamano = 0;
Vector = NULL;
}
MetodosBusqueda::~MetodosBusqueda()
{
//dtor
}
void MetodosBusqueda::limpiar(){
if (tamano > 0 ) {
tamano = 0;
delete []Vector;

}
}
void MetodosBusqueda::setTamano(int N){
tamano = N;
if (N > 0){
Vector = new string[N];
}
}
int MetodosBusqueda::getTamano(){
return tamano;
}
void MetodosBusqueda::setVector(int p, string ve){
Vector[p] = ve;
}
string MetodosBusqueda::getVector(int p){
return Vector[p];
}
//Implementacin del mtodo que busca lineal o secuencialmente los datos en el vector. En este mtodo
//recorre el vector desde el primer elemento hasta el ultimo, comparando cada elemento del vector con el valor
// buscado hasta que se encuentre el elemento o se llegue al final del vector. Este mtodo es recomendado
//para realizar bsquedas con pocos datos.
int MetodosBusqueda::busquedaLineal(string dato){
int i; //Variable para controlar el ciclo while.
int posicion; //Variable que devuelve la posicin en la que se encuentra el elemento buscado en el vector.
//Se Asigna el valor de -1 a la variable posicin para devolver este valor en el supuesto caso de que no se
//encuentre el valor buscado dentro del vector.
posicion = -1;
i = 0;
//Mientra que no se llegue al final del vector y no se haya encontrado el dato buscado en el vector.
while ((i <= getTamano()-1) && (posicion == -1)){
//Si el contenido del vector en la posicin i-esima es igual al dato que se esta buscando, entonces el dato si
//esta en el vector y se devuelve la posicin en donde se encuentra el dato dentro del vector. Sino, el dato no
//se encuentra en esa posicin e incremento la posicin (i) para una nueva comparacin.
if (getVector(i) == dato){
posicion=i;
}else{
i=i+1;
}
}
return posicion;
}
//implementacin del mtodo de ordenamiento por intercambio. Este mtodo se utiliza para ordenar el vector y
//realizar la bsqueda con el mtodo de bsqueda binaria (se puede usar cualquier mtodo de ordenamiento).
void MetodosBusqueda::ordenarIntercambio(){
int i,j;
string temp;
for (i=0; i<=getTamano()-1; i++){
for (j=i+1; j<=getTamano()-1; j++){
if (getVector(i) > getVector(j)){
temp = getVector(i);
setVector(i, getVector(j));
setVector(j, temp);
}
}
}

}
//Implementacin del mtodo de bsqueda binaria. Este mtodo es una tcnica eficaz para realizar bsquedas
//en vectores que contienen un mayor numero de datos. Este mtodo divide el vector en mitades de manera
//sucesiva hasta que encuentra el dato buscado, es decir, el mtodo divide el vector y se examina el elemento
//central del vector. Si es el elemento que se busca, entonces la bsqueda finaliza, pero sino, se determina si el
//dato buscado esta en la primera o segunda parte del vector y se repite el proceso en la nuevo rango de
//datos, buscando su elemento central. Para realizar la bsqueda binaria el vector debe estar ordenado y se
//comienza comparando con el elemento central.
int MetodosBusqueda::bsuquedaBinaria(string dato){
int posicion, izq, der, centro; //Estas 4 variables almacenan posiciones del vector.
ordenarIntercambio();
izq = 0; //Primera posicin del vector
der = getTamano()-1; //Ultima posicin del vector
//Se asigna el valor de -1 a la variable posicin para devolver este valor en el supuesto caso de que no se
//encuentre dato buscado dentro del vector.
posicion = -1;
//Mientra que no se llegue al final del vector y no se haya encontrado el dato buscado en el vector.
while ((izq <= der) && (posicion == -1)){
//Se busca cual es la posicin del dato que se encuentra en el centro del vector.
centro = (izq + der) / 2;
//Si el dato buscado es igual a lo que tiene el vector en la posicin del centro entonces ya se encontr el
//elemento buscado y se devuelve la posicin en donde se encontr, pero sino, entonces se determina si el
//elemento esta a la izquierda o a la derecha del vector. Y se procede a buscar el dato hacia el inicio del vector
//(izquierda) o hacia el final del vector (derecha), esto si el dato buscado es mayor o menor al elemento que se
//encuentra en el centro del vector.
if (dato == getVector(centro)){
posicion = centro;
}else{
if (dato < getVector(centro)){
der = centro-1;
}else{
izq = centro+1;
}
}
}
return posicion;
}

Fichero main.cpp
#include "metodosbusqueda.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
//Se declara un mtodo para colocar las opciones del men y devolver un numero entero, correspondiente a
//una de las opciones del menu.
int menu();
int main () {
MetodosBusqueda obj;
int opc;
int tam;
string valorElemento;

int buscar;
string datoBuscar;
do{
opc = menu(); //Se llama al men de opciones y se asigna la opcin escogida a la variable opc
switch(opc){
case 1:
system("cls");
cout << "________________________________________________ \n";
cout << "\n DIGITE EL NUMERO DE ELEMENTOS DEL VECTOR \n";
cout << "________________________________________________ \n \n";
cout << "Cuantos elementos tendra en vector: ";
cin >> tam;
obj.setTamano(tam);
cout << "________________________________________________ \n";
cout << "\n DIGITE LOS VALORES DE LOS ELEMENTOS DEL VECTOR \n";
cout << "________________________________________________ \n \n";
for (int i=0; i<=obj.getTamano()-1; i++){
cout << "Digite el valor del elemento " << i << ": ";
cin >> valorElemento;
obj.setVector(i, valorElemento);
}
cout << "\n \n";
break;
case 2:
system("cls");
cout << "________________________________________________ \n";
cout << "\n
BUSQUEDA LINEAL O SECUENCIAL \n";
cout << "________________________________________________ \n \n";
cout << "\n";
cout << "Digite el dato que desea buscar: ";
cin >> datoBuscar;
buscar = obj.busquedaLineal(datoBuscar);
if (buscar != -1){
cout << "\n";
cout << "El dato " << datoBuscar << " SE ENCUENTRA en la posicion " << buscar << " del vector";
}else{
cout << "\n";
cout << "El dato NO SE ENCUENTRA dentro del vector";
}
cout << "\n \n";
break;
case 3:
system("cls");
cout << "________________________________________________ \n";
cout << "\n
BUSQUEDA BINARIA \n";
cout << "________________________________________________ \n \n";
cout << "Digite el dato que desea buscar: ";
cin >> datoBuscar;
buscar = obj.bsuquedaBinaria(datoBuscar);
if (buscar != -1){
cout << "\n";
cout << "El dato " << datoBuscar << " SE ENCUENTRA en la posicion " << buscar << " del vector";
}else{
cout << "\n";
cout << "El dato NO SE ENCUENTRA dentro del vector";
}
cout << "\n \n";
break;

case 4:
system("cls");
cout << "________________________________________________ \n";
cout << "\n
DATOS DEL VECTOR \n";
cout << "________________________________________________ \n \n";
for (int i=0; i<=obj.getTamano()-1; i++){
cout << "Dato de la posicion " << i << ": " << obj.getVector(i) << "\n";
}
cout << "\n \n";
break;
case 5:
break;
}
}while(opc != 5);
return 0;
}
//Implementacin del men de opciones
int menu(){
int opcion = 0;
cout << "________________________________________________ \n";
cout << "\n ESCOJA EL METODO DE BUSQUEDA A UTILIZAR \n";
cout << "________________________________________________ \n \n";
cout << "1. Llenar el Vector \n";
cout << "2. Busqueda Lineal o Secuencial \n";
cout << "3. Busqueda Binaria \n";
cout << "4. Mostrar Elementos del Vector \n";
cout << "5. Salir \n";
cout << "________________________________________________ \n";
do{
cout << "\nSeleccione una opcion del 1 al 5: ";
cin >> opcion;
}while(opcion <= 0 || opcion > 5);
return opcion;
}

También podría gustarte