Busqueda Binaria – C Sharp
Hace unos días y ponía un ejemplo acerca de búsquedas lineales en arreglos, ésta vez hablaremos acerca de las búsquedas lineales, un método mucho más rápido para buscar elementos.
¿Cómo funciona este método? Para poder aplicar éste método de búsqueda es necesario que el arreglo esté ordenado; posteriormente, se aplica el siguiente algoritmo: se ubica el elemento de la mitad del arreglo, entonces, si el número que se está buscando dentro del arreglo es menor al número de la mitad, se busca el número de la mitad entre el inicio del y la mitad del mismo, y así hasta encontrar el elemento deseado.
Por ejemplo, suponiendo que tenemos un arreglo con los siguientes valores:
2, 4, 5 , 6, 8, 9, 10, 12, 24, 34, 46, 56, 60, 67, 78, 89, 90
…y queremos buscar el valor 10; tenemos que, el elemento de la mitad contiene el valor 24. Puesto que 24 > 10, buscamos el valor intermedio entre el principio del arreglo y la mitad del mismo, esto es 8. Puesto que 8 < 10, buscamos el valor intermedio entre 8 y la mitad del arreglo (24), esto es 10. Así, con tan solo 3 bucles, hemos conseguido el valor buscado.
Vamos con el código del programa, que nos sacará de toda duda:

using System;
using System.Drawing;
using System.Windows.Forms;
public class EjemploBusquedaBinaria : Form
{
private Label labelSolicitar;
private TextBox cajaEntrada;
private Label labelResultado;
private Label labelMostrar;
private Label labelSalida;
private Button botonBuscar;
int[] a = { 0, 2, 4, 6, 8, 10, 12, 14, 16,
18, 20, 22, 24, 26, 28 };
public EjemploBusquedaBinaria(){
InitializeComponent();
}
private void InitializeComponent() {
this.labelMostrar = new Label();
this.labelResultado = new Label();
this.cajaEntrada = new TextBox();
this.labelSolicitar = new Label();
this.botonBuscar = new Button();
this.labelSalida = new Label();
this.SuspendLayout();
//
// labelMostrar
//
this.labelMostrar.Location = new System.Drawing.Point(261, 8);
this.labelMostrar.Name = "labelMostrar";
this.labelMostrar.Size = new System.Drawing.Size(152, 20);
this.labelMostrar.TabIndex = 3;
//
// labelResultado
//
this.labelResultado.Location = new System.Drawing.Point(213, 8);
this.labelResultado.Name = "labelResultado";
this.labelResultado.Size = new System.Drawing.Size(50, 16);
this.labelResultado.TabIndex = 2;
this.labelResultado.Text = "Resultado:";
//
// cajaEntrada
//
this.cajaEntrada.Location = new System.Drawing.Point(99, 8);
this.cajaEntrada.Name = "cajaEntrada";
this.cajaEntrada.TabIndex = 1;
this.cajaEntrada.Text = "";
//
// labelSolicitar
//
this.labelSolicitar.Location = new System.Drawing.Point(27, 8);
this.labelSolicitar.Name = "labelSolicitar";
this.labelSolicitar.Size = new System.Drawing.Size(56, 16);
this.labelSolicitar.TabIndex = 0;
this.labelSolicitar.Text = "Digite el dato";
//
// botonBuscar
//
this.botonBuscar.Location = new System.Drawing.Point(152, 40);
this.botonBuscar.Name = "botonBuscar";
this.botonBuscar.Size = new System.Drawing.Size(136, 24);
this.botonBuscar.TabIndex = 5;
this.botonBuscar.Text = "Buscar dato";
this.botonBuscar.Click += new System.EventHandler(this.botonBuscar_Click);
//
// labelSalida
//
this.labelSalida.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.labelSalida.Location = new System.Drawing.Point(10, 80);
this.labelSalida.Name = "labelSalida";
this.labelSalida.Size = new System.Drawing.Size(420, 72);
this.labelSalida.TabIndex = 4;
//
// EjemploBusquedaBinaria
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(440, 157);
this.Controls.AddRange(new Control[] {
this.botonBuscar,
this.labelSalida,
this.labelMostrar,
this.labelResultado,
this.cajaEntrada,
this.labelSolicitar});
this.Name = "EjemploBusquedaBinaria";
this.Text = "Busqueda Binaria";
this.ResumeLayout(false);
}
static void Main() {
Application.Run( new EjemploBusquedaBinaria() );
}
private void botonBuscar_Click( object sender,
System.EventArgs e )
{
int valorBuscar = Int32.Parse( cajaEntrada.Text );
// iniciar los datos de salida
labelSalida.Text = "Portions of array searched\n";
// realizar busqueda binaria
int elemento = Buscar( a, valorBuscar );
if ( elemento != -1 )
labelMostrar.Text = "Valor encontrado en indice " +
elemento;
else
labelMostrar.Text = "Valor no encontrado";
} // fin botonBuscar_Click
// buscar mediante metodo binario
public int Buscar( int[] array, int dato ) {
int bajo = 0;
int alto = array.Length - 1;
int medio;
while ( bajo <= alto ) {
medio = ( bajo + alto ) / 2;
// el siguiente método nos muestra la porción del
// arreglo donde se está llevando a cabo la busqueda
// del dato en cada iteración del bucle
construirSalida( a, bajo, medio, alto );
if ( dato == array[ medio ] ) // si se encuentra el valor
return medio;
else if ( dato < array[ medio ] )
alto = medio - 1; // buscar en la mitad más baja
else
bajo = medio + 1; // buscar en la mitad más alta
} // fin de la busqueda binaria
return -1; // dato no encontrado
} // fin del metodo Buscar
public void construirSalida(
int[] array, int bajo, int mid, int alto ) {
for ( int i = 0; i < array.Length; i++ ) {
if ( i < bajo || i > alto )
labelSalida.Text += " ";
// marcar el elemento de la mitad en la salida
else if ( i == mid )
labelSalida.Text +=
array[ i ].ToString( "00" ) + "* ";
else
labelSalida.Text +=
array[ i ].ToString( "00" ) + " ";
}
labelSalida.Text += "\n";
} // fin de construirSalida
} // fin de la clase EjemploBusquedaBinaria
17 Comentarios | deja el tuyo





Hola quisiera me enviaran por email todo lo que tengan acerca de busqueda binaria, es para un trabajo de la escuela, ok gracias
hola..queria pedirles que me manden ejemplos de todo tipo en c sharp.gracias.
joaquinguzman282@hotmail.com
Hola quisiera me enviaran por email todo lo que tengan acerca de busqueda mas simple, es para un trabajo de la escuela, ok gracias
En cuanto pueda lo haré.
Hola como estan .. por ahi estube leyendo y viendo lo que ustedes tienen de busqueda binaria y veo que esta muy entendible y me gustaria que me enviaran mas sobre este metodo binario; ejemplos , algoritmos etc es para un trabajo. GRACIAS…
la verdad esta pagina esta muy mal hecha por que casi no se le entiende am he calado estos programas asi como estan y no corren contiene muchos errores que no es posible que no se dne cuentha ashhh
Eres el único que no ha podido con los ejercicios desde hace 4 años que existe el blog… tal vez el problema no es la página, tal vez seas tú.
Un saludo!
DEJAME DECIRTE QUE SOY TECNICO EN INFORMATICA Y ESOS PROGRAMAS NO SON TAN PERFECTOS COMO LOS HACEN VER EN ESTA PAGINA ADEMAS LOS ACAVO DE CHECAR Y TIENE MUCHOS ERRORES TE RECOMENDARIA QUE LOS PASARAS A ABORLAND C++ PARA QUE TE DIERAS CUENTA EN LO QUE ESTAS EQUIVOCADO
Primero: no escribas todo en mayúsculas. Es bastante molesto
Segundo: tu puedes ser técnico en informática, cocinero, sacerdote o lo que sea, eso no tiene nada que ver. Y sí, los programas no son “tan perfectos”, pero funcionan. Como “técnico” en informática eso no debería ser problema, vos mismo podrías arreglar eso (te recomiendo este artículo: http://casidiablo.net/ingenieros/ ).
El mismo programa está hecho aquí mismo en Java si mal no recuerdo, y funciona. Si no te sirve o no supiste cómo correrlo ni modos, hay muchas otras páginas donde se explica… a los que le sirve, excelente, a los que no, ni modos
Un saludo!
No lo hago con la intecnion de molestar ni mucho menos solo son comentarios que te recomiendo que tomes en cuenta ya que como colegas devemos ayudarnos entre si si te ofendi disculpame y te recomiendo que te enfoques mas en el programa solo te pido de favor que lo agas un poco mas explicito por que a mis alumnos les recomende esta pagina por que se que es muy buena y me disculpo de nuevo gracias
No te preocupes, no me has ofendido.
El programa, lo miré hace un rato… descargué el código tal como está, desenfundé el compilador de C# de Mono, lo compilé y ejecuté. Por un momento pensé que era de esos programas que uno hace mal de gusto (usted sabe, para no darle todo “masticado” a los estudiantes, sino que se les obligue a revisar el código para qué no funciona… pero en este caso no es así).
A mi parecer está bien… tal vez le hace falta algo de explicación (no todo se puede hacer como en este artículo por ejemplo http://casidiablo.net/tutorial-basico-android/ ), pero creo que la idea no es muy difícil.
Un saludo y gracias por las sugerencias!
Saves en un par de dias suvire mi pagina personal y miraras el mismo codigo que tu tienes pero de manera a como yo te lo estoy diciendo manana te dejare mi direccion y me das tu opinion que dices aceptas o no
Por supuesto, eso sería genial. La idea es que le sirva a muchas personas…
Un saludo!
gracias pero me gusta hacerlo por mis propios esfuerzos y tengo un gran deber que tengo que entregar en unos dias estoy casi muerto
gracias por el gran ejemplo pero bastaia con un poquito solo necesitaba la sintaxis de la busqueda binaria no todo un programa…gracias
no hay nada de interessante por favor si van a poner algo que sirva ok
no me gusto para nada easo