Está en la página 1de 28

Bsqueda Binaria Si la tabla de nmeros est ordenada, por ejemplo, en orden creciente, es posible utilizar para la bsqueda un algoritmo

ms eficiente que se basa en un concepto muy utilizado en la programacin: dividir para vencer. Si est ordenada la tabla y miramos el nmero situado en la mitad para ver si es mayor o menor que el nmero buscado (o con suerte igual), sabremos si la bsqueda ha de proceder en la subtabla con la mitad de tamao que est antes o despus de la mitad. Si se repite recursivamente el algoritmo al final o bienencontraremos el nmero sobre una tabla de un slo elemento o estaremos seguros de que no se encuentra all. Este mtodo permite buscar un valor en una matriz que se esta ordenando ascendentemente utilizando el algoritmo de bsqueda binaria. Se trata de un algoritmo muy eficiente en cuanto el tiempo requerido para realizar una bsqueda es muy pequeo. La sintaxis expresada de forma genrica para realizar este mtodo es la siguiente: Int BinarySearch ([ ] m. tipo clave) Donde m representa la matriz, clave es el valor que se desea buscar del mismo tipo que los elementos de la matriz, tipo es cualquier tipo de datos de los siguientes: objet, string, byte, char, short, int, long, flota, double, etc. La bsqueda binaria slo se puede implementar si el arreglo est ordenado. La idea consiste en ir dividiendo el arreglo en mitades. Por ejemplo supongamos que tenemos este vector: int vector[10] = {2,4,6,8,10,12,14,16,18,20}; La clave que queremos buscar es 6. El algoritmo funciona de la siguiente manera 1. Se determinan un ndice arriba y un ndice abajo, Iarriba=0 e Iabajo=10 respectivamente. 2. Se determina un ndice central, Icentro = (Iarriba + Iabajo)/2, en este caso quedara Icentro = 5. 3. Evaluamos si vector[Icentro] es igual a la clave de bsqueda, si es igual ya encontramos la clave y devolvemos Icentro. 4. Si son distintos, evaluamos si vector[Icentro] es mayor o menor que la clave, como el arreglo est ordenado al hacer esto ya podemos descartar una mitad del arreglo asegurndonos que en esa mitad no est la clave que buscamos. En nuestro caso vector[Icentro] = 5 < 6, entonces la parte del arreglo vector[05] ya puede descartarse. 5. Reasignamos Iarriba o Iabajo para obtener la nueva parte del arreglo en donde queremos buscar. Iarriba, queda igual ya que sigue siendo el tope. Iabajo lo tenemos que subir hasta 6, entonces quedara Iarriba = 10, Iabajo = 6. Y volvemos al paso 2. CODIGO

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;

using System.Drawing; using System.Text; using System.Windows.Forms; namespace busquedabinaria { public partial class Form1 : Form { public int[] num = new int[100]; public int x; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int Primero = 0, Ultimo = N - 1,Centro = 0; if (textBox1 != 0) { while ((Primero <= Ultimo) && (Encontrado == false)) { Centro = (Primero + Ultimo) / 2; if ( num[x] == textBox1) Encontrado = true; else { if (num[x] > textBox1) Ultimo = Centro - 1; else Primero = Centro + 1; } } } } private void button3_Click(object sender, EventArgs e) { num[x] = textBox1; } private void label2_Click(object sender, EventArgs e) { if (Encontrado == false) label2 = "el numero fue encontrado"; else label2 = "el numero no fue encontrado"; } } }

Corrida

BUSQUEDA SECUENCIAL EXTERNA La bsqueda de un elemento dentro de un array es una de las operaciones ms importantes en el procesamiento de la informacin, y permite la recuperacin de datos previamente almacenados. El tipo de bsqueda se puede clasificar como interna o externa, segn el lugar en el que est almacenada la informacin (en memoria o en dispositivos externos). Todos los algoritmos de bsqueda tienen dos finalidades: - Determinar si el elemento buscado se encuentra en el conjunto en el que se busca. - Si el elemento est en el conjunto, hallar la posicin en la que se encuentra. En este apartado nos centramos en la bsqueda interna. Como principales algoritmos de bsqueda en arrays tenemos la bsqueda secuencial, la binaria y la bsqueda utilizando tablas de hash. Consiste en recorrer y examinar cada uno de los elementos del array hasta encontrar el o los elementos buscados, o hasta que se han mirado todos los elementos del array. EJEMPLO NOTA En este ejemplo se debe ir primero a la opcin mostrar, pues de esta manera el arreglo se cargara de los datos del archivo, de otra manera marcara que no se encuentra el dato buscado.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

namespace BusquedaSecuencialExterna { public partial class Principal : Form { public Principal() { InitializeComponent(); }

private void cmdMostrar_Click(object sender, EventArgs e)

{ frmMostrar m = new frmMostrar(); m.Show(); }

private void cmdBuscar_Click(object sender, EventArgs e) { frmBuscar b = new frmBuscar(); b.Show(); }

private void cmdSalir_Click(object sender, EventArgs e) { Close(); } } }

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;

namespace BusquedaSecuencialExterna { public partial class frmMostrar : Form { public frmMostrar() { InitializeComponent(); }

//Este mtodo despliega los valores almacenados en el archivo previamente creado //Los valores se despliegan al cargar la forma private void frmMostrar_Load(object sender, EventArgs e) { //variable que almacenara lo que se extraer del archivo. string res; //Creacin del objeto de la clase StreamReader que se encargara de leer //el archivo cuya ubicacin ser en un flder previamente creado en la //carpeta donde se encuentra la clase program.cs //**NOTA**

//La ubicacin se escribe ../../Archivo/Informacion.txt, incluyendo la //extensin del archivo, ejemplo Info.dat, Info.txt, etc. StreamReader s = new StreamReader("../../Archivo/Informacion.txt"); //Ciclo que se encargara de ir almacenando los datos del archivo //(en este caso nmeros) en un arreglo for (int c = 0; c < Program.tamano; c++) { res = s.ReadLine(); //Lnea especifica que se encarga de guardar la informacin en un arreglo //Como los datos extrados del archivo son de texto y se desea manipular //la "int.Parse(res)" informacin como numricos solo agregamos la parte

//para indicar que lo que queremos almacenar ser transformado a valor entero. Program.arreglo[c] = int.Parse(res); }

//Ciclo que se encarga de desplegar la informacin del arreglo en un listbox. for (int i = 0; i < Program.tamano; i++) listBox1.Items.Add(Program.arreglo[i]); }

private void cmdCerrar_Click(object sender, EventArgs e) { Close(); } } }

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

namespace BusquedaSecuencialExterna { public partial class frmBuscar : Form { public frmBuscar() { InitializeComponent(); } // mtodo que contiene el cdigo que realizara la bsqueda (secuencial) int BusquedaSecuencial()

{ int i = 0; // Se da entrada a la "clave" que es valor que se desea buscar. Program.clave = int.Parse(txtBusqueda.Text); while (i < Program.tamano) { if (Program.arreglo[i] == Program.clave) return i; i = i + 1; } return -1; // No se encuentra en el arreglo }

private void cmdBuscar_Click(object sender, EventArgs e) { try { // Creacin de la variable que almacenara el resultado int Res; //llamada asigna a una //variable. Res = BusquedaSecuencial(); //condicin contrario, despliega que determina si se encontr el elemento, de lo al mtodo que realiza la bsqueda binaria y se le

//un mensaje. if (Res == -1) MessageBox.Show("No se encontr el elemento"); //Despliegue del Resultado. txtResultado.Text = Res.ToString();

groupBox2.Visible = true; } catch { MessageBox.Show("Ocurri un error"); } }

private void cmdLimpiar_Click(object sender, EventArgs e) { txtBusqueda.Clear(); txtResultado.Clear(); txtBusqueda.Focus(); groupBox2.Visible = false; }

private void cmdCerrar_Click(object sender, EventArgs e) { Close(); } } }

Al igual que en la ventana de Busqueda secuencial, despus de presionar el botn de Buscar, aparecer un groupbox el cual al principio se encuentra invisible, es decir se manipulo la propiedad Visible = false, y cuando se presiona el botn buscar se cambia la propiedad a Visible = true, para mostrar los resultados de la bsqueda. NOTA: Esta ventana muestra el indice del elemento en el arreglo, es decir, que nos muestra en la posicion en la que se encuentra dentro del arreglo. BUSQUEDA BINARIA EXTERNA

Para realizarla, es necesario contar con un array o vector ordenado. Luego tomamos un elemento central, normalmente el elemento que se encuentra a la mitad del arreglo, y lo comparamos con el elemento buscado. Si el elemento buscado es menor, tomamos el intervalo que va desde el elemento central al principio, en caso contrario, tomamos el intervalo que va desde el elemento central hasta el final del intervalo. Procedemos de esta manera con intervalos cada vez menores hasta que lleguemos a un intervalo indivisible, en cuyo caso el elemento no est en el vector, o el elemento central sea nuestro elemento. De esta forma la complejidad computacional se reduce a O(ln N). Ejemplo NOTA En este ejemplo se debe ir primero a la opcin mostrar, pues de esta manera el arreglo se cargara de los datos del archivo, de otra manera marcara que no se encuentra el dato buscado. DISEO DE LA FORMA PRINCIPAL En la forma principal nicamente se empleo un groupbox el cual contiene los botones para cada una de las formas que se van a emplear, y se emplea como se observa a continuacin: CODIGO DE LA FORMA PRINCIPAL
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

namespace BusquedaBinariaExterna { public partial class frmPrincipal : Form { public frmPrincipal() { InitializeComponent();

} private void cmdMostrar_Click(object sender, EventArgs e) { frmMostrar m = new frmMostrar(); m.Show(); } private void cmdBuscar_Click(object sender, EventArgs e) { frmBuscar b = new frmBuscar(); b.Show(); } private void cmdSalir_Click(object sender, EventArgs e) { Close(); } } }

En este cdigo se observa que se crearon objetos de cada una de las clases que se desean llamar, ejemplo frmMostrar m = new frmMostrar(); y de esta manera se utiliza dicho objeto para mostrar la forma que se desea emplear al momento. DISEO DE LA FORMA MOSTRAR: DONDE SE CARGAN LOS DATOS AL ARREGLO En esta forma solo se observa solo un botn, el cual es el botn cerrar, esto se debe a que los datos se cargan automticamente al cargar la forma, esto se observa en el mtodo de private void frmMostrar_Load(object sender, EventArgs e) el cual se genera automticamente al dar doble clic en la forma frmMostrar. Se observa que los datos se cargan en un listbox, el cual puede ir agregando elementos. En este caso se implementa de esta manera: listBox1.Items.Add(Program.arreglo[i]); como se puede observar en el cdigo. CODIGO DE LA FORMA MOSTRAR

using System;

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;

namespace BusquedaBinariaExterna { public partial class frmMostrar : Form { public frmMostrar() { InitializeComponent(); } private void cmdCerrar_Click(object sender, EventArgs e) { Close(); } private void frmMostrar_Load(object sender, EventArgs e) { string res; StreamReader s = new StreamReader("../../Archivo/Informacion.txt"); for (int c = 0; c < Program.tamano; c++) { res = s.ReadLine(); Program.arreglo[c] = int.Parse(res); }

for (int i = 0; i < Program.tamano; i++) listBox1.Items.Add(Program.arreglo[i]); } } }

en esta parte del cdigo se cargan los datos del archivo en el arreglo, se debe acceder a esta opcin primero, antes de realizar la bsqueda, pues como lo mencionaba, en esta opcin se cargan los datos. DISEO DE LA FORMA BUSCAR En esta forma se observa que se crearon 3 botones; buscar, limpiar, Cerrar. Se observa que se creo una etiqueta la cual muestra una pequea instruccin y se observa una caja de texto, que ser en la cual se introducir el elemento que se desea buscar. CODIGO DE LA FORMA BUSCAR

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;

namespace BusquedaBinariaExterna { public partial class frmBuscar : Form { public frmBuscar() { InitializeComponent();

} int busquedaBinaria() { // Se da entrada a la "clave" que es valor que se desea buscar. Program.clave = int.Parse(txtBusqueda.Text); //cdigo que se encarga de hacer la BUSQUEDA BINARIA int Iarriba = Program.tamano - 1; int Iabajo = 0; int Icentro; while (Iabajo <= Iarriba) { Icentro = (Iarriba + Iabajo) / 2; if (Program.arreglo[Icentro] == Program.clave) return Icentro; else if (Program.clave < Program.arreglo[Icentro]) Iarriba = Icentro - 1; else Iabajo = Icentro + 1; } //En caso de no encontrarse regresara el valor -1 para indicar el error return -1; } private void cmdBuscar_Click(object sender, EventArgs e) { try { // Creacin de la variable que almacenara el resultado int Res;

//llamada asigna a una

al

mtodo

que

realiza

la

bsqueda

binaria

se

le

//variable. Res = busquedaBinaria(); //condicin contrario, despliega que determina si se encontr el elemento, de lo

//un mensaje. if (Res == -1) MessageBox.Show("No se encontr el elemento"); //Despliegue del Resultado. txtResultado.Text = Res.ToString(); groupBox2.Visible = true; } catch { MessageBox.Show("Ocurri un error"); } } private void cmdLimpiar_Click(object sender, EventArgs e) { txtBusqueda.Clear(); txtResultado.Clear(); txtBusqueda.Focus(); groupBox2.Visible = false; } private void cmdCerrar_Click(object sender, EventArgs e) { Close(); } }

Despus de presionar el botn de Buscar, aparecer un groupbox el cual al principio se encuentra invisible, es decir se manipulo la propiedad Visible = false, y cuando se presiona el botn buscar se cambia la propiedad a Visible = true, para mostrar los resultados de la bsqueda. NOTA: Esta ventana muestra el indice del elemento en el arreglo, es decir, que nos muestra en la posicion en la que se encuentra dentro del arreglo. 8.1.3 Bsqueda Hash En este mtodo se requiere que los elementos estn ordenados. El mtodo consiste en asignar el ndice a cada elemento mediante una transformacin del elemento, esto se hace mediante una funcin de conversin llamada funcin hash. Hay diferentes funciones para transformar el elemento y el nmero obtenido es el ndice del elemento. La principal forma de transformar el elemento es asignarlo directamente, es decir al 0 le corresponde el ndice 0, al 1 el 1, y as sucesivamente pero cuando los elementos son muy grandes se desperdicia mucho espacio ya que necesitamos arreglo grandes para almacenarlos y estos quedan con muchos espacios libres, para utilizar mejor el espacio se utilizan funciones mas complejas. La funcin de hash ideal debera ser biyectiva, esto es, que a cada elemento le corresponda un ndice, y que a cada ndice le corresponda un elemento, pero no siempre es fcil encontrar esa funcin, e incluso a veces es intil, ya que puedes no saber el nmero de elementos a almacenar. La funcin de hash depende de cada problema y de cada finalidad, y se pueden utilizar con nmeros o cadenas, pero las ms utilizadas son: 1.- Restas sucesivas: Esta funcin se emplea con claves numricas entre las que existen huecos de tamao conocido, obtenindose direcciones consecutivas. Un ejemplo serian los alumnos de ingeniera en sistemas que entraron en el ao 2005 sus nmeros de control son consecutivos y esta definido el numero de alumnos. 05210800 -05210800 0 05210801 -05210800 1 05210802 -05210800 2 05210899 -05210800 99 2.- Aritmtica modular:

El ndice de un nmero es resto de la divisin de ese nmero entre un nmero N prefijado, preferentemente primo. Los nmeros se guardarn en las direcciones de memoria de 0 a N-1. Este mtodo tiene el problema de que dos o ms elementos pueden producir el mismo residuo y un ndice puede ser sealado por varios elementos. A este fenmeno se le llama colisin. Si el nmero N es el 7, los nmeros siguientes quedan transformados en: 1679 > 6 4567 > 3 8471 > 1 0435 > 1 5033 > 0 Mientras mas grande sea nmero de elementos es mejor escoger un nmero primo mayor para seccionar el arreglo en ms partes. El nmero elegido da el nmero de partes en que se secciona el arreglo, y las cada seccin esta compuesta por todos los elementos que arrojen el mismo residuo, y mientras mas pequeas sean las secciones la bsqueda se agilizara mas que es lo que nos interesa. 3.- Mitad del cuadrado: Consiste en elevar al cuadrado la clave y coger las cifras centrales. Este mtodo tambin presenta problemas de colisin. 709^2=502681 > 26 456^2=207936 > 79 105^2=11025 > 10 879^2=772641 > 26 619^2=383161 > 31 Nota: en caso de que la cifra resultante sea impar se toma el valor nmero y el anterior. 4.- Truncamiento: Consiste en ignorar parte del nmero y utilizar los elementos restantes como ndice. Tambin se produce colisin. Por ejemplo, si un nmero de 7 cifras se debe ordenar en un arreglo de elementos, se pueden tomar el segundo, el cuarto y el sexto para formar un nuevo nmero: 5700931 > 703 3498610 > 481 0056241 > 064

9134720 > 142 5174829 > 142 5.- Plegamiento: Consiste en dividir el nmero en diferentes partes, y operar con ellas (normalmente con suma o multiplicacin). Tambin se produce colisin. Por ejemplo, si dividimos el nmero de 7 cifras en 2, 2 y 3 cifras y se suman, dar otro nmero de tres cifras (y si no, se toman las tres ltimas cifras): 5700931 > 57 + 00 + 931 = 988 3498610 > 34 + 98 + 610 = 742 0056241 > 00 + 56 + 241 = 297 9134720 > 91 + 34 + 720 = 845 5174929 > 51 + 74 + 929 = 1054 Nota: Estas solo son sugerencias y que con cada problema se pude implementar una nueva funcin hash que incluso tu puedes inventar o formular. Tratamiento de colisiones Hay diferentes maneras de solucionarlas pero lo ms efectivo es en vez de crear un arreglo de nmero, crear un arreglo de punteros, donde cada puntero seala el principio de una lista enlazada. As, cada elemento que llega a un determinado ndice se pone en el ltimo lugar de la lista de ese ndice. El tiempo de bsqueda se reduce considerablemente, y no hace falta poner restricciones al tamao del arreglo, ya que se pueden aadir nodos dinmicamente a la lista. PRUEBA LINEAL Consiste en que una vez detectada la colisin se debe recorrer el arreglo secuencialmente a partir del punto de colisin, buscando al elemento. El proceso de bsqueda concluye cuando el elemento es hallado, o bien cuando se encuentra una posicin vaca. Se trata al arreglo como a una estructura circular: el siguiente elemento despus del ltimo es el primero. La funcin de rehashing es, por tanto, de la forma: R(H(X)) = (H(X) + 1) % m (siendo m el tamao del arreglo) Ejemplo: Si la posicin 397 ya estaba ocupada, el registro con clave 0596397 es colocado en la posicin 398, la cual se encuentra disponible. Una vez que el registro ha sido insertado en esta posicin, otro registro que genere la posicin 397 o la 398 es insertado en la posicin siguiente disponible. Ejemplo: Tomando en cuenta los datos de la seccin 2 de este tema crea un programa que mediante bsqueda hash encuentre los datos requeridos y asegurate de tratar las colisiones.
using System; using System.Collections.Generic; using System.ComponentModel;

using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;

namespace WindowsApplication1 { public partial class Form1 : Form { private int[] datos = new int[5] {1679, 4567, 8471, 0435, 5033 }; private int[] hash = new int[7]; private int[] enlace = new int[7]; public Form1() { InitializeComponent(); for (int b = 0; b <= 6; b++) { enlace[b] = -9999; } //Reacomodo por hash int r, aux=0; for (int i = 0; i <= 4; i++) { r= datos[i] % 7; if (datos[i] == 0) { hash[r] = datos[i]; }

else { for(int s=0;s<=6;s++) { if(hash[s]==0) { aux=s; } } hash[aux]=datos[i]; enlace[r] = aux; } } }

private void buscar_Click(object sender, EventArgs e) { int temp,r; temp = int.Parse(textBox1.Text.ToString()); r = temp % 7; if (temp == hash[r]) { MessageBox.Show("Se encuentra en \nel renglon:" + r.ToString(), "Resultado"); } else { while(enlace[r] != -9999) { if (temp == hash[enlace[r]])

{ MessageBox.Show("Se enlace[r].ToString(), "Resultado"); r = enlace[r]; } } } } } } encuentra en \nel renglon:" +

Imagenes de programa corriendo:

8.2 Bsqueda externa En los algoritmos de bsqueda interna se hacan bsquedas en arreglos y variables dentro de la memoria del programa, ahora en bsqueda externa trataremos la manera de cmo encontrar datos dentro de documentos guardados fuera de la memoria del programa es decir dispositivos de almacenamiento(disco duro, CD, USV, etc.). Para poder realizar dicha bsqueda primero hay que tener acceso al documento desde el programa y para eso tenemos que implementar una funcin del siguiente tipo: Si la direccin del documento es fija:
FileStream son = new FileStream(OpenFile.Direccion del documento, FileMode.Open, FileAccess.Read); StreamReader so = new StreamReader(son);

Si no es fija puedes usar esta estructura:


OpenFileDialog Open = new OpenFileDialog(); Open.ShowDialog(); try { FileStream son FileAccess.Read); = new FileStream(OpenFile.FileName, FileMode.Open,

StreamReader so = new StreamReader(son); } catch(ArgumentException) { }

Lo que esta asi son nombres de objetos y si modificas uno modifica todos los que lleven el mismo nombre, lo que esta asi lo puedes modificar tomando en consideracion lo que dice el texto. La parte de StreamReader so = new StreamReader(son); tomala a consideracion. Ahora ya tenemos acceso de lectura al documento especificado y podremos hacer la bsqueda de los datos requeridos esto lo haremos mediante algn mtodo planteado en los siguientes temas. Ejemplo 1: Crea un documento de notepad que contenga 5 nombres (Ana, Claudia, Norma, Paola, Sandra) uno por rengln y busca un nombre desde C#.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO;

namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() {

InitializeComponent(); }

private void buscar_Click(object sender, EventArgs e) { int r=0; OpenFileDialog OpenFile = new OpenFileDialog(); OpenFile.ShowDialog(); try { FileStream son = new FileStream(OpenFile.FileName, FileMode.Open, FileAccess.Read); StreamReader so = new StreamReader(son); for (int i = 0; i <=4; i++) { if (textBox1.Text.ToString() == (so.ReadLine()).ToString()) { r = i + 1; } } so.Close(); } catch (ArgumentException) { } if (r != 0) { MessageBox.Show("Se encuentra en \nel renglon:" + r.ToString(), "Resultado"); }

else { MessageBox.Show("No se encontro en el arreglo", "Resultado"); }

} } }

Programa corriendo:

sing System; using System.Collections.Generic; using System.Linq; using System.Text; namespace B.B_int_ { class Program { class binaria { int[] a = new int[10]; int N = 9; int r = 1; Random R = new Random(); public void generar() { for ( int i=0;i<=N;i++) { a [i] = R.Next(10, 25); Console.WriteLine("{0}-{1}", i + 1, a[i]); } } public void ordenar() { for (int x = 1; x <= N - 1; x++) { for (int y = 0; y <= N - x; y++) { if (a[y] > a[y + 1]) { int Temp = a[y]; a[y] = a[y + 1]; a[y + 1] = Temp; } } } } public void desplegar() { for (int y = 0; y <= a.Length 1; y++) { Console.WriteLine("\t{0}{1}", y + 1, a[y]); } } pu blic void busqueda(int num) { int l = 0,h=9; int m = 0; bool found = false; while (l <= h && found == false) { m = (l + h) / 2; if (a[m] == num) found = true; if (a[m] > num) h = m 1; else l = m + 1; } if (found == false) { Console.Write("\nEl elemento {0} no esta en el arreglo", num); } else { Console.Write("\nEl elemento {0} esta en la posicion: {1}", num, m + 1); } } public void menubusqueda() { int op1 = 1; do { Console.Clear (); desplegar(); Console.Write("\ n\n\tElemento a buscar: "); int num = int.Parse(Console.ReadLine() ); busqueda(num); Console.Write(" \n\n\tDeseas Buscar otro elemento 1=Si - 0=No: "); op1 = int.Parse(Console.ReadLine()); } while (op1 == 1); } } static void Main(string[] args) { binaria obj = new binaria(); int op; do { Console.Clear(); Console.WriteLine("\n\t\t1-

Generar/inicializar"); Console.WriteLine("\t\t2Ordenar"); Console.WriteLine("\t\t3desplegar"); Console.WriteLine("\t\t4Buscar/Desplegar"); Console.WriteLine("\t\t5Salir"); Console.Write("\n\nElige opcion: "); op = int.Parse(Console.ReadLine()); switch (op) { case 1: Console.Clear(); obj.g enerar(); Console.WriteLine("\n\n\t\tgenerados"); Console.ReadLine(); brea k; case 2: Console.Clear(); obj.o rdenar(); Console.WriteLine("\n\n\t\tOrdenados"); Console.ReadLine(); brea k; case 3: Console.Clear(); obj.d esplegar(); Console.ReadLine(); break; case 4: Console.Clear(); obj.m enubusqueda(); break; case 5: Console.WriteLine("Salir"); Console.ReadLine(); break; default: Console.WriteLine("ese numero no existe"); Console.ReadLine(); break; } } while (op != 5); } } }

También podría gustarte