/// método llamado desde otro menú del main una vez hayamos elegido ///el tipo de algoritmo con el que vamos a trabajar
/// el objeto algoritmo es de tipo Ordenación
public static void MenúModo(Ordenación algoritmo,int tamaño)
{
int modo;
int[] vector = new int[tamaño];
do
{
Console.Clear();
Console.WriteLine(".- SELECCIONA UNA OPCIÓN");
Console.WriteLine("1.- INTRODOCIR VECTOR MANUALMENTE");
Console.WriteLine("2.- GENERAR VECTOR ALEATORIO");
Console.WriteLine("3.- ORDENAR VECTOR: ORDEN ASCENDENTE");
Console.WriteLine("4.- ORDENAR VECTOR: ORDEN DESCENDENTE");
Console.WriteLine("5.- MOSTRAR VECTOR");
Console.WriteLine("6.- BORRAR VECTOR");
Console.WriteLine("7.- VOLVER AL MENÚ");
Console.Write("Elija opción(1-7): ");
modo = Convert.ToInt32(Console.ReadLine());
switch (modo)
{
case 1:
algoritmo.Insertar(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 2:
algoritmo.InsertarAleatorio(vector);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
case 3:
Console.WriteLine("Ordenando....");
algoritmo.Ordenar(vector);
Console.WriteLine("¡Vector ordenado en orden ascendente!");
Console.WriteLine("Tiempo empleado"+algoritmo.TiempoEjecución);
Console.WriteLine("nº comparaciones:" + algoritmo.NumComparaciones);
Console.WriteLine("nº intercambios" + algoritmo.NumIntercambios);
Console.WriteLine("Pulse entrar para continuar");
Console.ReadLine();
break;
///Clase ancestro de clases; "Burbuja", "Selección"..., cada cual con su propio método ordenar
public class Ordenación
{
protected long tiempoEjecución;
protected int numComparaciones;
protected int numIntercambios;
public void Insertar(int[] vector)
{
for (int i = 0; i < vector.Length; i++)
{
Console.Write("Introduzca elemento["+i+"]");
try
{
int elemento = Convert.ToInt32(Console.ReadLine());
vector[i] = elemento;
}
catch (FormatException )
{
Console.WriteLine("Elemento incorrecto");
}
}
}
///Clase Burbuja
public class Burbuja: Ordenación
{
private int nComparaciones = 0;
private int nIntercambios = 0;
public override void Ordenar(int[] vector)
{
Stopwatch temporizador = new Stopwatch();
temporizador.Start();
int sup = vector.Length - 1;
int temp;
for (int i = sup; i >= 1; i--)
{
for (int j = 0; j <= i - 1; j++)
if (vector[j] > vector[j + 1])
{
temp = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = temp;
nIntercambios++;
}
nComparaciones ++;
}
temporizador.Stop();
TiempoEjecución = temporizador.ElapsedMilliseconds;
NumComparaciones = nComparaciones;
NumIntercambios = nIntercambios;
}