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;
}
Paulo Andres Escobar Ingenieria de Sistemas, Orientacion a la Programacion el arte de crear Programas
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
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.
Suscribirse a:
Entradas (Atom)