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 opción 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.

DISEÑO 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 continuación:

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 código 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.

DISEÑO DE LA FORMA MOSTRAR:

“DONDE SE CARGAN LOS DATOS AL ARREGLO”

En esta forma solo se observa solo un botón, el cual es el botón cerrar, esto se debe a que los datos se cargan automáticamente al cargar la forma, esto se observa en el método de private void frmMostrar_Load(object sender, EventArgs e) el cual se genera automáticamente 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 código.

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 código se cargan los datos del archivo en el arreglo, se debe acceder a esta opción primero, antes de realizar la búsqueda, pues como lo mencionaba, en esta opción se cargan los datos.

DISEÑO 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 pequeña instrucción 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);            //código 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            {                // Creación de la variable que almacenara el resultado                int Res;                //llamada al método que realiza la búsqueda binaria y se le asigna a una                //variable.                Res = busquedaBinaria();                //condición que determina si se encontró el elemento, de lo contrario, despliega                //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();        }    } 
}
 

Después de presionar el botón 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 botón buscar se cambia la propiedad a Visible = true, para mostrar los resultados de la búsqueda.

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.

Politica de Privacidad