viernes, 17 de junio de 2011

Metodo De Ordenamiento Por Seleccion [C#]

El ordenamiento por selección (Selection Sort en inglés ) es un algoritmo de ordenamiento que requiere operaciones para ordenar una lista de n elementos(Osea En Arreglos);

Su funcionamiento es el siguiente:

Buscar el mínimo elemento de la lísta
Intercambiarlo con el primero
Buscar el mínimo en el resto de la lista
Intercambiarlo con el segundo

Y en general:

Buscar el mínimo elemento entre una posición i y el final de la lista
Intercambiar el mínimo con el elemento de la posición i

En Lo general El Algoritmo Es este:
int minimo=0;
for(i=0 ; i<n-1 ; i++)
{
   minimo=i;
   for(j=i+1 ; j<n ; j++)
   {
      if (x[minimo] > x[j]) minimo=j;
   }
   temp=x[minimo];
   x[minimo]=x[i];
   x[i]=temp;
}

Ahora Aplicado En Un Problema Que tube En Modo Consola:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {
            Console.Title = "Programa";
            Console.Write("Ingrese Numero De Alumnos: ");
            int num = int.Parse(Console.ReadLine());
            Console.WriteLine("\nNombre\t\t\tN1\tN2\tN3\tPromedio");
            Console.WriteLine("======\t\t\t==\t==\t==\t========");
            string[] nom = new string[15];
            double[] n1 = new double[15];
            double[] n2 = new double[15];
            double[] n3 = new double[15];
            double[] prom = new double[15];
            double x;
            for (int i = 0; i < num; i++)
            {
                Console.Write("");
                nom[i] = Console.ReadLine();
                Console.SetCursorPosition(24, 4 + i);
                Console.Write("");
                n1[i] = int.Parse(Console.ReadLine());
                Console.SetCursorPosition(32, 4 + i);
                Console.Write("");
                n2[i] = int.Parse(Console.ReadLine());
                Console.SetCursorPosition(40, 4 + i);
                Console.Write("");
                n3[i] = int.Parse(Console.ReadLine());
                Console.SetCursorPosition(48, 4 + i);
                x = (n1[i] + n2[i] + n3[i]) / 3;
                Console.Write(Math.Round(x, 2));
                prom[i] = x;
                Console.WriteLine();
            }
            Console.WriteLine("\nPrecione Una Tecla Para Comenzar...");
            Console.ReadKey();
            int n = num;
            for (int i = 0; i < n - 1; i++)
             {
             int posMin = i;
              for (int j = i + 1; j < n; j++)
               {
                    if (prom[j] [color=red]>[/color] prom[posMin])
                   {
                        posMin = j;
                    }
               }
                double iaux = prom[i];
                prom[i] = prom[posMin];
                prom[posMin] = iaux;
                string naux = nom[i];
                nom[i] = nom[posMin];
                nom[posMin] = naux;
                double n1aux = n1[i];
                n1[i] = n1[posMin];
 
                n1[posMin] = n1aux;
                double n2aux = n2[i];
                n2[i] = n2[posMin];
 
                n2[posMin] = n2aux;
                double n3aux = n3[i];
 
                n3[i] = n3[posMin];
                n3[posMin] = n3aux;
 
            }
            Console.WriteLine("\nNombre\t\t\tN1\tN2\tN3\tPromedio");
            Console.WriteLine("======\t\t\t==\t==\t==\t========");
            int lineas= num + 7;
            for (int i = 0; i < n; i++)
            {
                Console.SetCursorPosition(0, lineas + i);
                Console.Write(nom[i]);
                Console.SetCursorPosition(24, lineas + i);
                Console.Write(n1[i]);
                Console.SetCursorPosition(32, lineas + i);
                Console.Write(n2[i]);
                Console.SetCursorPosition(40, lineas + i);
                Console.Write(n3[i]);
                Console.SetCursorPosition(48, lineas + i);
                Console.Write(Math.Round(prom[i],2));
                Console.WriteLine();
            }
            Console.ReadLine();
 
        }
    }
}

Lo Que Se realizo En Este Pequeño Programa Fue :
Ingreso El Numero De Alumnos.
Y Despues De Acabar Se Muestra Asi.
Disculpen que no Trabajo Con Clases Es Que Soy Muy nuevo en Esto
Ejecucion.
Bueno Eso es en Orden Desendente Si Quieren En Acsendente Cambien Solo El Simbolo De "<" x ">"

La Imagen De Muestra...

Estoo

2 comentarios: