domingo, 16 de junio de 2013

Programa con todos los métodos de ordenación


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//se agregan......
using System.Windows.Forms;
using System.Drawing;

namespace Shaker_Sort__VISUAL_
{
    class Ordenamiento
    {
        Label comparaciones, intercambios;
        int[] vec;
        int tam, comp, interc;
        public Ordenamiento(int[] v,Label L1, Label L2)
        {                                                            //forma = f
            comparaciones = L1;
            intercambios = L2;
            tam = v.Length;
            vec = new int[tam];
            for (int i = 0; i < v.Length; i++)
                vec[i] = v[i];
            interc = comp = 0;
        }

        public void BurbujaA(Form forma, bool como)
        {
            for (int i = 0; i < vec.Length; i++)
                for (int j = vec.Length - 1; i < j; j--)
                {
                    comp++;
                    if (vec[j - 1] > vec[j])
                    {
                        int aux = vec[j - 1];
                        vec[j - 1] = vec[j];
                        vec[j] = aux;
                        interc++;
                        //Thread.Sleep(100);
                       // mostrarN(forma);
                    }
                }
            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }
        public void BurbujaD(Form forma, bool como)
        {
            for (int i = 0; i < vec.Length; i++)
                for (int j = vec.Length - 1; i < j; j--)
                {
                    comp++;
                    if (vec[j - 1] < vec[j])
                    {
                        int aux = vec[j - 1];
                        vec[j - 1] = vec[j];
                        vec[j] = aux;
                        interc++;
                        for (int s = 0; s < 100000000; s++) ;
                        mostrarN(forma);
                    }
                }

            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }
//-------------------------------------------------------------------------------------------

        public void SacudidaA(Form forma, bool como)
        {
            int a, b, c, d, aux;
            c = 1;
            b = vec.Length - 1;
            d = vec.Length - 1;
            do
            {
                for (a = d; a >= c; --a)
                {
                    comp++;
                    if (vec[a - 1] > vec[a])
                    {
                        aux = vec[a - 1];
                        vec[a - 1] = vec[a];
                        vec[a] = aux;
                        b = a;
                        interc++;
                    }
                }
                c = b + 1;
                for (a = c; a < d + 1; ++a)
                {
                    comp++;
                    if (vec[a - 1] > vec[a])
                    {
                        aux = vec[a - 1];
                        vec[a - 1] = vec[a];
                        vec[a] = aux;
                        b = a;
                        interc++;
                    }
                }
                d = b - 1;
            } while (c <= d);

            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }

        public void SacudidaD(Form forma, bool como)
        {
            int a, b, c, d, aux;
            c = 1;
            b = vec.Length - 1;
            d = vec.Length - 1;
            do
            {
                for (a = d; a >= c; --a)
                {
                    comp++;
                    if (vec[a - 1] < vec[a])
                    {
                        aux = vec[a - 1];
                        vec[a - 1] = vec[a];
                        vec[a] = aux;
                        b = a;
                        interc++;
                    }
                }
                c = b + 1;
                for (a = c; a < d + 1; ++a)
                {
                    comp++;
                    if (vec[a - 1] < vec[a])
                    {
                        aux = vec[a - 1];
                        vec[a - 1] = vec[a];
                        vec[a] = aux;
                        b = a;
                        interc++;
                    }
                }
                d = b - 1;
            } while (c <= d);

            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }

//------------------------------------------------------------------------------

        //SAKER
        public void SHSORT(Form forma, bool como)
        {
            SAHKERSORT(0, vec.Length - 1);
            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }

        public void SAHKERSORT(int izq, int der)
        {
            int i, j,N;
          //  izq = 2;
            //der = j;
            j = der;
           i = izq;
            N = vec[(izq + der) / 2];
            do
            {
                for (i = der; i > izq; i--)
                    if (vec[i - 1] > vec[i])
                    {
                        j = 1;
                    }
                izq = j + 1;
                for (i = izq; i > der; i++)
                    if (vec[i - 1] > vec[i])
                    {
                        j = 1;
                    }
                der = j - 1;
            }
            while (izq <= der);
            if (izq < j)
                quicksort(izq, j);
            if (i < der)
                quicksort(i, der);
        }

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        //QUICK SORT
       public void quicksort(int izq, int der)
        {
            int i,j,pivote,aux;
            i = izq;
            j = der;
            pivote = vec[(izq+der)/2];
            do
            {
                comp++;
                while (vec[i] < pivote && i < der)
                {
                    i++;
                }
                comp++;
                while (vec[j] > pivote && j > izq)
                {
                    j--;
                }
                if(i <= j)
                {
                   aux = vec[i];
                    vec[i] = vec[j];
                    vec[j] = aux;
                    i++;
                    j--;
                    interc++;
                }
            }while(i <=j);
             if(izq < j)
                quicksort(izq,j);
            if(i < der)
                quicksort(i,der);
        }

        public void QSORT(Form forma, bool como)
        {
            quicksort(0, vec.Length - 1);
            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }

        public void quicksortD(int izq, int der)
        {
            int i, j, pivote, aux;
            i = izq;
            j = der;
            pivote = vec[(izq + der) / 2];
            do
            {
                comp++;
                while (vec[i] < pivote && i < der)
                {
                    i++;
                }
                comp++;
                while (vec[j] > pivote && j > izq)
                {
                    j--;
                }
                if (i <= j)
                {
                    aux = vec[i];
                    vec[i] = vec[j];
                    vec[j] = aux;
                    i++;
                    j--;
                    interc++;
                }
            }
            while (i >= j);
            if (izq < j)
                quicksort(izq, j);
            if (i < der)
                quicksort(i, der);
        }

        public void QSORTD(Form forma, bool como)
        {
            quicksortD(0, vec.Length - 1);
            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

        public void Shell_2(Form forma, bool como)
        {
            int i, j, k, s, w, aux;
            int[] a = { 9, 5, 3, 3, 1 };
            for (w = 0; w < a.Length; w++)
            {
                k = a[w];
                s = -k;
                for (i = k; i < vec.Length; ++i)
                {
                    aux = vec[i];
                    j = i - k;
                    //if (s == 0)
                    //{
                    //    s = -k;
                    //    s++;
                    //    vec[s] = aux;
                    //}
                    comp++;
                    try
                    {
                        //while (j >= 0 && j <= vec.Length && aux < vec[j])
                        while (aux < vec[j] && j >= 0 && j <= vec.Length)
                        {
                            vec[j + k] = vec[j];
                            j -= k;
                            interc++;
                        }                       
                    }
                    catch { }
                    vec[j + k] = aux;
                }
            }
            if (como)
                mostrarN(forma);
            else
                mostrarG(forma);
        }

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        //ORDENAMIENTO SHELL SORT

        public void shellSort(int[] vec, int n)
        {
            int i, aux;
            bool band;
            int inc=n;

            while (inc > 1)
            {
                inc = inc / 2;
                band = true;

                while (band)//while (band==true)
                {
                    band = false;
                    i = 0;//i=1;

                    while ((i + inc) < n)// while ((i + inc) <= n)
                    {
                        if (vec[i] > vec[i + inc])
                        {
                            aux = vec[i];
                            vec[i] = vec[i + inc];
                            vec[i + inc] = aux;
                            band = true;
                        }
                        i = i + 1;
                    }
                }
            }
        }//fin del metodo shell sort


        public void shellSort2(Form forma, bool como)
        {
            int i, aux;
            bool band;
            
            int inc = vec.Length;

            while (inc > 1)
            {
                inc = inc / 2;
                band = true;

                while (band)//while (band==true)
                {
                    band = false;
                    i = 0;//i=1;

                    while ((i + inc) < vec.Length)// while ((i + inc) <= n)
                    {
                        if (vec[i] > vec[i + inc])
                        {
                            aux = vec[i];
                            vec[i] = vec[i + inc];
                            vec[i + inc] = aux;
                            band = true;
                        }
                        i = i + 1;
                    }
                }
            }
        }//fin del metodo shell sort

//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
        public void mostrarN(Form f)
        {
            Graphics g = f.CreateGraphics();
            f.Refresh();
            //f.Invalidate();
            Font font = new Font("Arial", 8);
            SolidBrush brush = new SolidBrush(Color.Black);
             int x = (int)font.Size, y = 10;
            for (int i = 0; i < vec.Length; i++)
            {     //DATOS ORDENADOS
                g.DrawString(vec[i].ToString(), font, brush, x, y);
                y += font.Height;
                if (y >= (f.Height - 50))//(int)font.Size * 2))
                {
                    x += (int)font.Size * 5;
                    y = 10;
                }
            }
            comparaciones.Text = "No. de Comp.  =" + "  " + Convert.ToString(comp);
            intercambios.Text = "No. de Interc.  = "+"  "+interc.ToString();                       
        }

        public void mostrarG(Form f)
        {
                Graphics g = f.CreateGraphics();
                f.Refresh();                    
                int ymax = f.Size.Height - 45;
                Pen p = new Pen(Brushes.Blue);
                p.Width = 3;
                g.DrawRectangle(p, 5, 5, 580, ymax); //this.Size.Height - 45);
                for (int i = 0; i < vec.Length; i++)
                {
                    g.DrawLine(Pens.Red, 10 + (5 * i), ymax + 3, 10 + (5 * i), ymax + 3 - vec[i]);                   
                }
                comparaciones.Text ="No. de Comp.  ="+ "  " + Convert.ToString(comp);
                intercambios.Text ="No. de Interc.  = "+"  " + interc.ToString();                        
        }

    }
}

====================================
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 Shaker_Sort__VISUAL_
{
    public partial class Form1 : Form
    {
        int n;
        int[] v;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Refresh();
            radioButton1.Checked = false;
            radioButton2.Checked = false;
            radioButton3.Checked = false;
            radioButton4.Checked = false;
            radioButton5.Checked = false;

            label4.Text = "";
            label5.Text = "";

            n = Int32.Parse(numericUpDown1.Value.ToString());

            v = new int[n];


            Graphics g = this.CreateGraphics();
            Font font = new Font("Arial", 8);
            SolidBrush brush = new SolidBrush(Color.Black);

            Random r = new Random();
            if (comboBox1.Text == "Numerica")
            {
                int x = (int)font.Size, y = 5;

                for (int i = 0; i < v.Length; i++)
                {

                    v[i] = r.Next(8999) + 1000;//v[i] = v[i];
                    g.DrawString(v[i].ToString(), font, brush, x, y);

                    y += font.Height;
                    if (y >= (this.Height - 50))
                    {
                        x += (int)font.Size * 5;
                        y = 5;
                    }
                }
            }
            else if (comboBox1.Text == "Grafica")
            {
                int ymax = this.Size.Height - 45;
                Pen p = new Pen(Brushes.Blue);
                p.Width = 2;
                g.DrawRectangle(p, 5, 5, 620, ymax);
                Pen p1 = new Pen(Brushes.Teal);
                p1.Width = 3;

                for (int i = 0; i < v.Length; i++)
                {
                    v[i] = r.Next(ymax - 5) + 1;
                    g.DrawLine(/*Pens.Red*/p1, 10 + (4 * i/*era 1 y salia inclinado*/), ymax + 3, 10 + (4 * i), ymax + 3 - v[i]);
                }

            }

        }

        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            if (sender == radioButton3)//burbuja simple
            {
                if (comboBox1.Text == "Numerica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.BurbujaA(this, true);
                        this.Text = "Burbuja Simple";
                    }
                    else if (radioButton2.Checked)//descendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.BurbujaD(this, true);
                    }
                }
                else if (comboBox1.Text == "Grafica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.BurbujaA(this, false);
                    }
                    else if (radioButton2.Checked)//descendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.BurbujaD(this, false);
                    }

                }
            }

            if (sender == radioButton4)//burbuja con senal
            {
                if (comboBox1.Text == "Numerica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SacudidaA(this, true);
                        this.Text = "Burbuja Simple";
                    }
                    else if (radioButton2.Checked)//descendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SacudidaD(this, true);
                    }
                }
                else if (comboBox1.Text == "Grafica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SacudidaA(this, false);
                    }
                    else if (radioButton2.Checked)//descendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SacudidaD(this, false);
                    }

                }
            }

            if (sender == radioButton5)
            {
                if (comboBox1.Text == "Numerica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SHSORT(this, true);
                        this.Text = "Burbuja Simple";
                    }
                }
                else if (comboBox1.Text == "Grafica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.SHSORT(this, false);
                    }
                }
            }

             if (sender == radioButton6)
            {
                if (comboBox1.Text == "Numerica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.Shell_2(this, true);
                        this.Text = "Burbuja Simple";
                    }
                }
                else if (comboBox1.Text == "Grafica")
                {
                    if (radioButton1.Checked)//ascendente
                    {
                        Ordenamiento lista = new Ordenamiento(v, label4, label5);
                        lista.Shell_2(this, false);
                    }
                }
            }
             if (sender == radioButton7)
             {
                 if (comboBox1.Text == "Numerica")
                 {
                     if (radioButton1.Checked)//ascendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.QSORT(this, true);
                         this.Text = "Burbuja Simple";
                     }
                     else if (radioButton2.Checked)//descendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.QSORTD(this, true);
                     }
                 }
                 else if (comboBox1.Text == "Grafica")
                 {
                     if (radioButton1.Checked)//ascendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.QSORT(this, false);
                     }
                     else if (radioButton2.Checked)//descendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.QSORTD(this, false);
                     }

                 }

             }
             if (sender == radioButton8)
             {
                 if (comboBox1.Text == "Numerica")
                 {
                     if (radioButton1.Checked)//ascendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.shellSort2(this, true);
                         this.Text = "Burbuja Simple";
                     }
                 }
                 else if (comboBox1.Text == "Grafica")
                 {
                     if (radioButton1.Checked)//ascendente
                     {
                         Ordenamiento lista = new Ordenamiento(v, label4, label5);
                         lista.shellSort2(this, false);
                     }

                 }

             }
        }
    }

}

No hay comentarios:

Publicar un comentario