Búsqueda Binaria en C#

Búsqueda Binaria en C#

El algoritmo de búsqueda binaria es un excelente método para buscar datos dentro de una estructura(generalmente un arreglo unidimensional). Se le da el nombre de búsqueda binaria por que el algoritmo divide en dos el arreglo, aludiendo al concepto de bit, el cual puede tener dos estados.
La única condición para usar este algoritmo es que los datos dentro del arreglo estén ordenados de menor a mayor.
La solución mas fácil para realizar una búsqueda es por fuerza bruta, pero este método puede resultar bastante ineficiente cuando se tiene una gran cantidad de datos, ya que habría que buscar posición por posición hasta encontrar el dato que queremos.
El código por fuerza bruta es bastante sencillo:

             for(int i=0; i<Arreglo.length; i++)
                     if(Arreglo[i] == elemento)
                     System.out.println("\nElemento encontrado en la posicion: " + i);

Solo se recorre todo el arreglo y verificamos si la posición i es igual al dato que queremos buscar, el código anterior se puede mejorar simplemente agregándole una bandera, pero aun así no es lo suficientemente bueno.
El algoritmo de búsqueda binaria es el siguiente:
  1. Se declaran los índices superior e inferior. El inferior en 0 y el superior con el tamaño del arreglo menos 1.
  2. Se calcula el centro del arreglo con la siguiente formula:  centro = (superior + inferior) / 2
  3. Verificamos si el arreglo en la posición centro es igual al dato que buscamos. Si es igual significa que encontramos el dato y retornamos centro.
  4. Si son diferentes verificamos si el arreglo en la posición centro es mayor al dato que queremos buscar. Si es mayor actualizamos superior: superior = centro - 1, si no actualizamos inferior: inferior = centro + 1.

 5. Volvemos al paso 2.
Si cuando ya no se cumpla la condición del ciclo y no se encontró el dato retornamos -1
indicando que el dato no se encuentra en el arreglo.

Búsqueda Binaria en C# 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BusquedaBinaria
{
    class Busqueda
    {
        private int[] vector;
        public void Cargar()
        {
            Console.WriteLine("Busqueda Binaria");
            Console.WriteLine("Ingrese 10 Elementos");
            string linea;
            vector = new int[10];
            for (int f = 0; f< vector.Length; f++)
            {
                Console.Write("Ingrese elemento " + (f + 1) + ": ");
                linea = Console.ReadLine();
                vector[f] = int.Parse(linea);
            }
        }
        public 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 (vector[m] == num)
                    found = true;
                if (vector[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 Imprimir()
        {
            for (int f = 0; f< vector.Length; f++)
            {
                Console.Write(vector[f] + "  ");
            }
        }
        static void Main(string[] args)
        {
            Busqueda pv = new Busqueda();
            pv.Cargar();
            pv.Imprimir();
            Console.Write("\n\nElemento a buscar: ");
            int num = int.Parse(Console.ReadLine());
            pv.busqueda(num);
            Console.ReadKey();
           
        }
    }
}

Al ejecutar el código muestra el siguiente resultado



2 comentarios: