Mostrando entradas con la etiqueta metodo de ordenacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta metodo de ordenacion. Mostrar todas las entradas

lunes, 27 de agosto de 2012

Metodo ordenacion shell

        //Metodo de Ordenacion SHELL
        private void button5_Click(object sender, EventArgs e)
        {
            int i, j, inc, temp;
            int n = 10;

            for (inc = 1; inc < n; inc = (inc * 3) + 1) ;

            while (inc > 0)
            {
                for (i = inc; i < n; i++)
                {
                    j = i;
                    temp = A[i];
                    while ((j >= inc) && (A[j - inc] > temp))
                    {
                        A[j] = A[j - inc];
                        j = j - inc;
                    }
                    A[j] = temp;
                }
                inc /= 2;
            }

        }

domingo, 12 de agosto de 2012

algoritmo de ordenacion por seleccion en c sharp

este es un método de ordenación muy común
para ordenar vectores

int  posMayor;
                for (int cont1 = 0; cont1 < tama - 1; cont1++)
                {
                    posMayor = cont1;
                    for (cont2 = cont1 + 1; cont2 < tama; cont2++)// tama es el tamaño del vector
                    {
                        if (words[posMayor].CompareTo(words[cont2]) < 0)
                        {
                            posMayor = cont2;
                        }

                    }
                    aux = words[posMayor];
                    words[posMayor] = words[cont1];
                    words[cont1] = aux;
                }

       

           

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.