domingo, 12 de agosto de 2012

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.

No hay comentarios:

Publicar un comentario