martes, 8 de octubre de 2019

QUICKSORT en Windows Form C#

Método de ordemiento QUICKSORT

En Windows FORMS C#

He leído en Internet un comentario, de que esperar a que alguien se le ocurra hacer el método de ordenamiento en Windows Forms C# seria algo como "Morirás esperando una respuesta". La verdad me reí un poco y aprovechando que estoy estudiando dicho tema.

Creo, que no morirás esperando, pues aqui te dejo un ejemplo práctico de como mostrar el funcionamiento.

EL DISEÑO es el siguiente

para lo cual se han agregado:
  •  2 controles ListBox: uno para números a ordenar listBox1 y otro para ordenados listBox2
  • 1 botón para ejecutar el ordenamiento button1
  • 1 botón para agregar nuevos números a la lista para ordenar button2
  • 1 caja de texto para escribir el nuevo número a agregar textBox1

EL FUNCIONAMIENTO
- El usuario agrega los números al listBox1 
- El usuario presiona sobre el botón "Ordenar QUICKSORT"
- El usuario ve en el ListBox2 el resultado de los datos ordenados


EL CÓDIGO

El método de ordenamiento lo obtuve del siguiente LINK
http://csharp-facilito.blogspot.com/2013/07/metodo-de-ordenamiento-quick-sort-en-c-sharp.html

 private void quicksort(int[] vector, int primero, int ultimo)
        {
            int i, j, central;
            double pivote;
            central = (primero + ultimo) / 2;
            pivote = vector[central];
            i = primero;
            j = ultimo;
            do
            {
                while (vector[i] < pivote) i++;
                while (vector[j] > pivote) j--;
                if (i <= j)
                {
                    int temp;
                    temp = vector[i];
                    vector[i] = vector[j];
                    vector[j] = temp;
                    i++;
                    j--;
                }
            } while (i <= j);

            if (primero < j)
            {
                quicksort(vector, primero, j);
            }
            if (i < ultimo)
            {
                quicksort(vector, i, ultimo);
            }
        }




El código del botón que tiene el simbolo "+" es:


        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(textBox1.Text);
        }

 

El código del botón que ORDENA QUICKSORT es:

        private void button1_Click(object sender, EventArgs e)
        {
            int[] datos = new int[100];
            for (int i = 0; i < listBox1.Items.Count; i++)
                datos[i] = Convert.ToInt32( listBox1.Items[i]);

            quicksort(datos, 0, datos.Length - 1);

            listBox2.Items.Clear();

            for (int i = 0; i < datos.Length; i++)
                if (datos[i] != 0)
                {
                    listBox2.Items.Add(datos[i]);
                }
        }



 

Sin más, espero les sirva este código.