Busqueda Binariaen Programacion
Busqueda Binariaen Programacion
Busqueda Binariaen Programacion
OBJETIVOS
Objetivo general:
Objetivos específicos:
1. Búsqueda binaria:
1.1 Concepto:
// Código C++:
int numeros[20];
int inf,sup,mitad,dato,i,j,n;
char band='F';
cout<<"ingrese el tamanio del vector: ";cin>>n;
cout<<endl;
for(i=0;i<n;i++){
cout<<" Elemento ["<<i<<"]=";
cin>>numeros[i];
}
cout<<"\n\nIngrese el numero que quiere Buscar: ";cin>>dato;
inf=0;
sup=5;
i=0;
while((inf<=sup)&&(i<n)){
mitad = (inf+sup)/2;
if(numeros[mitad] == dato){
band='V';
break;
}
if(numeros[mitad]>dato){
sup = mitad;
mitad = (inf+sup)/2;
}
if(numeros[mitad]<dato){
inf = mitad;
mitad = (inf+sup)/2;
}
i++;
}
if(band == 'V'){
j=mitad;
Escribir' Elemento[',i']'
Leer numeros[i]
Fin Para
inf=0
sup=n
i=0
Si (numeros[mitad]>dato) Hacer
sup = mitad;
mitad = (inf+sup)/2
Fin Si
Si (numeros[mitad]<dato) Hacer
inf = mitad;
mitad = (inf+sup)/2;
Fin si
i++
Fin Mientras
j=mitad;
1.6 Ventajas:
1.7 Desventajas:
1. Ingrese tres vectores por teclado y el 1er y 2do vector multiplíquelos y con
el resultado obtenido restamos del vector 3 y con el resultado que obtenemos
aplicar el ordenamiento por el método Shell para de esta manera realizar la
Búsqueda Binaria de un número.
Codificación:
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<cmath>
#include<stdbool.h>
void ingreso();
void proceso(int vec1[],int vec2[],int vec3[],int vec4[],int vec5[]);
void shell(int vec5[]);
void busqueda_binaria(int vec5[]);
void imprimir(int vec1[],int vec2[],int vec3[],int vec4[],int vec5[]);
int dato,inf,sup,mitad;
char band='F';
int i,n;
int vector1[20],vector2[20],vector3[20],vector4[20],vector5[20];
char op='s';
int main()
{
presentacion();
system("cls");
cout<<"\n --------------------> OPERACIONES CON VECTORES <--------------------
--"<<endl;
cout<<" !BIENVENIDO!"<<"\n\n";
cout<<"Antes de empezar debes recordar que: "<<"\n\n";
cout<<" METODO SHELL:"<<endl;
cout<<" | Es un algoritmo de ordenamiento. Su implementacion
|"<<endl;
cout<<" | original, requiere 0(n^2) comparaciones |"<<endl;
cout<<" | e intercambios en el peor caso. |"<<"\n\n";
cout<<" BUSQUEDA BINARIA:"<<endl;
cout<<" | Solo se puede implementar si el arreglo esta |"<<endl;
cout<<" | ordenado. La idea consiste en ir dividiendo |"<<endl;
cout<<" | el arreglo en mitades |"<<"\n\n";
cout<<" !MUY BIEN EMPEZEMOS!"<<"\n\n";
system("pause");
ingreso();
proceso(vector1,vector2,vector3,vector4,vector5);
imprimir(vector1,vector2,vector3,vector4,vector5);
getch();
return 0;
}
void ingreso()
{
system("cls");
system("color 3f");
cout<<"\n --------------------> OPERACIONES CON VECTORES <--------------------
--"<<endl;
cout<<" !BIENVENIDO!"<<"\n\n";
cout<<endl;
cout<<" VECTOR_1: "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" Posicion ["<<i<<"]: ";
while((cin>>vector1[i]).fail())
{
cin.clear();
fflush(stdin);
cout<<"\n!Error! Porfavor ingrese solo numeros"<<"\n\n";
cout<<" Posicion ["<<i<<"]: ";
}
}
cout<<"\n\n";
cout<<" VECTOR_2: "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" Posicion ["<<i<<"]: ";
while((cin>>vector2[i]).fail())
{
cin.clear();
fflush(stdin);
cout<<"\n!Error! Porfavor ingrese solo numeros"<<"\n\n";
cout<<" Posicion ["<<i<<"]: ";
}
}
cout<<"\n\n";
cout<<" VECTOR_3: "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" Posicion ["<<i<<"]: ";
while((cin>>vector3[i]).fail())
{
cin.clear();
fflush(stdin);
cout<<"\n!Error! Porfavor ingrese solo numeros"<<"\n\n";
cout<<" Posicion ["<<i<<"]: ";
}
}
cout<<"\n\n";
system("pause");
}
ints=n;
while(ints>1)
{
ints=(ints/2);
band=true;
while(band==true)
{
band=false;
i=0;
while((i+ints)<n)
{
if(vec5[i]>vec5[i+ints])
{
aux=vec5[i];
vec5[i]=vec5[i+ints];
vec5[i+ints]=aux;
band=true;
}
i++;
}
}
}
}
while(inf<=sup)
{
mitad=(inf+sup)/2;
if(vec5[mitad]==dato)
{
band='V';
break;
}
if(vec5[mitad]>dato)
{
sup=mitad;
mitad=(inf+sup)/2;
}
if(vec5[mitad]<dato)
{
inf=mitad;
mitad=(inf+sup)/2;
}
}
}
cout<<"\n\n";
cout<<" VECTOR_2: "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" "<<vector2[i];
}
cout<<"\n\n";
cout<<" VECTOR_3: "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" "<<vector3[i];
}
cout<<"\n\n";
cout<<"\n\n";
cout<<" --> La diferencia entre (VECTOR_1*VECTOR_2) - VECTOR_3 es:";
cout<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" "<<vec5[i];
}
cout<<"\n\n";
cout<<" [El vector ordenado ascendentemente] "<<"\n\n";
for(i=0;i<n;i++)
{
cout<<" "<<vec5[i];
}
//BUSQUEDA BINARIA
cout<<"\n\n";
cout<<" Ingrese el elemento que desee buscar: ";cin>>dato;
cout<<"\n\n";
busqueda_binaria(vec5);
if(band=='V')
{
cout<<" El numero: " << dato << ", Ha sido encontrado en la posicion
["<<mitad<<"] "<<"\n\n";
}else
if(band=='F')
{
cout<<" Dato no encontrado"<<"\n\n";
}
system("pause");
cout<<"\n\n";
cout<<"Desea realizar un nuevo proceso??"<<endl;
cout<<" S/s=si"<<endl;
cout<<" N/n=no"<<endl;
cout<<"OP: ";cin>>op;
if(op=='s'||op=='S')
{
ingreso();
proceso(vector1,vector2,vector3,vector4,vector5);
imprimir(vector1,vector2,vector3,vector4,vector5);
}else
{
cout<<"\n\n !GRACIAS POR TU VISITA!"<<endl;
cout<<" !VUELVE PRONTO!"<<"\n\n";
system("pause");
}
}
EJECUCIÓN:
MAPA MENTAL
Bibliografía
Conclusiones
Del informe realizado se determinó que la búsqueda binaria es un método
eficiente ya que nos permite buscar un elemento en una lista de arrays esto
lo realiza siempre y cuando el vector o lista de arrays esté ordenada.
El método de Shell se lo puede aplicar en una lista de arrays para así poder
implementar la búsqueda binaria ya que el método Shell permite que un
elemento haga "pasos más grandes" hacia su posición esperada. Los pasos
múltiples sobre los datos se hacen con tamaños de espacio cada vez más
pequeños.