miércoles, 20 de abril de 2011

METODOS DE ORDENACION EN C#

Esto de ordenar los datos también es importante el algunas cuestiones de la progrmación por eso aqui estan los metodos de ordenacion mas famosos en un ejemplo en modo consola:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace MetodosOrdenacion
{
    class Program
    {
        static void Main(string[] args)
        {           
            Console.Write("cuantos numeros desea ingresar: ");
            int n = int.Parse(Console.ReadLine());
            int []numeros =new int [n];
            Console.WriteLine("Ingrese sus {0} numero:",n);
            for (int i = 0; i < n;i++)
            {
                numeros[i]=(int.Parse(Console.ReadLine()));
            }

            Console.Write(@"Que metodo desea llevar a cabo
1.- insercion
2.- shell
3.- Quick Sort
4.- burbuja       (");
            int x=int.Parse(Console.ReadLine());
            Console.WriteLine("");
            switch(x)
            {
                case 1:
                    Console.WriteLine("Metodo de insercion directa\n");
                    int auxili;
                    int j;
                    for (int i = 0; i < numeros.Length ; i++)
                    {
                        auxili = numeros[i];
                        j = i - 1;
                        while (j >= 0 && numeros[j] > auxili)
                        {
                            numeros[j + 1] = numeros[j];
                            j--;
                        }
                        numeros[j + 1] = auxili;
                    }
                    for (int i = 0; i < numeros.Length; i++)
                    Console.WriteLine(" " + numeros[i]);
                    break;
                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                case 2:
                    Console.WriteLine("Metodo de Shell\n");
                    int salto = 0;
                    int sw=0;
                    int auxi = 0;
                    int e=0;
                    salto = numeros.Length / 2;
                    while (salto >0)
                    {
                        sw=1;
                        while (sw!=0)
                        {
                            sw=0;
                            e=1;
                            while (e <= (numeros.Length - salto))
                            {
                                if (numeros [e-1]>numeros [(e-1)+salto ])
                                {
                                    auxi =numeros [(e-1)+salto ];
                                    numeros [(e-1)+salto ]=numeros [e-1];
                                    numeros [(e-1)]=auxi;
                                    sw=1;
                                }
                                e++;
                            }
                        }
                        salto =salto /2;
                    }
                    for (int i = 0; i < numeros.Length; i++)
                    Console.WriteLine(" " + numeros[i]);
                    break;
                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                case 3:
                    Console.WriteLine("metodo de Quick sorf");
                    quicksort(numeros, 0, numeros.Length - 1);
                    for (int i = 0; i < numeros.Length; i++)
                    {

                        Console.WriteLine(numeros[i]);
                    }
                    break;

                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                //-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
                case 4:
                    Console.WriteLine("Metodo de la burbuja");
                    int temp;

                    for (int i = 0; i < numeros.Length; i++)
                    {
                        for (int k = i + 1; k < numeros.Length; k++)
                        {
                            if (numeros[i] > numeros[k])
                            {
                                temp = numeros[i];
                                numeros[i] = numeros[k];
                                numeros[k] = temp;
                            }
                        }
                    }
                    for (int i = 0; i < numeros.Length; i++)
                    {
                        Console.WriteLine(" " + numeros[i]);
                    }
                    break;

                default:
                    Console.WriteLine("Opcion no validad\n\nFin del programa");
                    break;

            }

            Console.ReadKey();
        }



        public static 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);
            }
        }
    }   
}