Paulo Andres Escobar Ingenieria de Sistemas, Orientacion a la Programacion el arte de crear Programas
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:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario