Mostrando entradas con la etiqueta busqueda binaria. Mostrar todas las entradas
Mostrando entradas con la etiqueta busqueda binaria. Mostrar todas las entradas

domingo, 12 de agosto de 2012

busqueda binaria recursiva

        private int busquedaRecursiva(string[] Vec,int limisup,int liminf)
        {

           
            int limiteInferior = liminf;
            int limiteSuperior = limisup;
            int Medio = (limiteSuperior - limiteInferior) / 2;
            if (Vec[Medio].CompareTo(datoparabuscar.Text) < 0)
                  limiteSuperior = (busquedaRecursiva(Vec, Medio-1,limiteInferior));
            if (Vec[Medio].CompareTo(datoparabuscar.Text) > 0)
                limiteInferior = (busquedaRecursiva(Vec, limisup+1,Medio));
            if (Vec[Medio].CompareTo(datoparabuscar.Text) == 0)
            {
                console.WriteLine("su dato fue encontrado en la posicion" + Medio);
                swiche = true;
            }
       

ordenacion y busqueda binaria recursiva y no recursiva por paulo en c#


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

namespace metodo_ordenacion
{
    public partial class Form1 : Form
    {
        string[] vectorOrdenado;
        bool swiche = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void OrdenarButton_Click(object sender, EventArgs e)
        {
            try
            {
                string s = datos.Text;
                string[] words = s.Split(',');
                int cont1 = 0;
                int cont2 = 0;
                int posMayor;
                int tama = words.Length;
                string aux;
                //ordenador
                for (cont1 = 0; cont1 < tama - 1; cont1++)
                {
                    posMayor = cont1;
                    for (cont2 = cont1 + 1; cont2 < tama; cont2++)
                    {
                        if (words[posMayor].CompareTo(words[cont2]) < 0)//{0.5.2.3}
                        {
                            posMayor = cont2;
                        }

                    }
                    aux = words[posMayor];
                    words[posMayor] = words[cont1];
                    words[cont1] = aux;
                }
                int cont3 = 0;

                //fin ordenador

                while (cont3 < tama)
                {
                    pantalla.Items.Add(words[cont3]);
                    cont3++;
                }
                vectorOrdenado = words;
            }
            catch (Exception)
            { MessageBox.Show("ERROR","ErrorBlinkStyle"); }

        }
        //fin del boton ordenar

        private void bbi_Click(object sender, EventArgs e)
        {
            bool sw = true;
         
            //Comienza Busqueda Binaria
            int LimiteInferior = 0;
            int LimiteSuperior = vectorOrdenado.Length;
            int Medio = (LimiteSuperior - LimiteInferior) / 2;
            for(int i = 0;i< vectorOrdenado.Length;i++)
            {
                if (vectorOrdenado[i].CompareTo(datoparabuscar.Text)<0)
                {
                    LimiteSuperior= Medio;
                    Medio = (LimiteSuperior - LimiteInferior) / 2;
                }
                if (vectorOrdenado[i].CompareTo(datoparabuscar.Text) > 0)
                {
                    LimiteInferior = Medio;
                    Medio = (LimiteSuperior - LimiteInferior) / 2;
                }
                if (vectorOrdenado[i].CompareTo(datoparabuscar.Text) == 0)
                {
                    sw = false;
                    MessageBox.Show("El dato buscado se encuentra en la posicion "+i );
                 
                }
             
                 
            }
            if (sw)
                MessageBox.Show("El dato buscado no se encuentra  ");

        }

        private void button2_Click(object sender, EventArgs e)
        {
          busquedaRecursiva(vectorOrdenado, vectorOrdenado.Length,0).ToString();

            if (!swiche)
                MessageBox.Show("no existe tal dato");

        }
        private int busquedaRecursiva(string[] Vec,int limisup,int liminf)
        {

         
            int limiteInferior = liminf;
            int limiteSuperior = limisup;
            int Medio = (limiteSuperior - limiteInferior) / 2;
            if (Vec[Medio].CompareTo(datoparabuscar.Text) < 0)
                  limiteSuperior = (busquedaRecursiva(Vec, Medio-1,limiteInferior));
            if (Vec[Medio].CompareTo(datoparabuscar.Text) > 0)
                limiteInferior = (busquedaRecursiva(Vec, limisup+1,Medio));
            if (Vec[Medio].CompareTo(datoparabuscar.Text) == 0)
            {
                MessageBox.Show("su dato fue encontrado en la posicion" + Medio);
                swiche = true;
            }
     
         

            return(Medio);
             
        }




    }
nota: para realizar la busqueda binaria el vector tiene que estar ordenado.