Está en la página 1de 3

namespace mor

{
class Program
{
static void Main(string[] args)
{
Console.Title = "P46 - ORDENAMIENTO POR MEZCLA - ";
Console.BackgroundColor = ConsoleColor.DarkBlue;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Clear();
//bloque try
try
{
int[] Matriculas = new int[20]; // declaración arreglo
int C; // contador
Console.Write("-- CAPTURA DE MATRICULAS --\n\n");
Console.Write("Ingrese matriculas entre 1 - 3 digitos\n");
for (C = 0; C < 20; C++) // ciclo for captura
{
Console.Write("Ingrese matricula {0}: ", C + 1);
Matriculas[C] = Convert.ToInt32(Console.ReadLine());
}
Console.WriteLine("\n\nCaptura exitosa... presione ENTER para continuar");
Console.ReadKey(); Console.Clear();
Console.Write("-- MATRICULAS CAPTURADAS (SIN ORDENAR) -- \n\n");
for (C = 0; C < 20; C++) // ciclo for despliegue (original)
{
Console.Write("{0} ", Matriculas[C]);
}
Mezcla_Principal(Matriculas); // llamada al procedimiento de ordenamiento por
mezcla
Console.Write("\n\n -- MATRICULAS ORDENADAS (MANERA ASCENDENTE
USANDO METODO MERGE)-- \n\n");
for (C = 0; C < 20; C++) // ciclo for despliegue (ordenado)
{
Console.Write("{0} ", Matriculas[C]);
}
Console.WriteLine("\n\nPrograma finalizado... presione ENTER para salir");
Console.ReadKey();
}//bloque catch
catch
{
}//bloque finally
finally
{
Console.WriteLine("El bloque finally a finalizado");
Console.ReadKey();
}
}
public static void Mezcla_Principal(int[] Matriculas)
{
Sorteo_Mezcla(Matriculas, 0, (Matriculas.Length - 1));
}
public static void Sorteo_Mezcla(int[] Matriculas, int desde, int hasta)
{
if (desde == hasta)
return; // para si la condición se cumple
int mitad = (desde + hasta) / 2; // proceso aritmético
Sorteo_Mezcla(Matriculas, desde, mitad); //ordena la primera mitad - recursividad
Sorteo_Mezcla(Matriculas, (mitad + 1), hasta); //ordena la segunda mitad -
recursividad
int[] auxy = Merge(Matriculas, desde, mitad, (mitad + 1), hasta); // mezclar las dos
mitades ordenadas
Array.Copy(auxy, 0, Matriculas, desde, auxy.Length); // copiar
}
public static int[] Merge(int[] x, int desde1, int hasta1, int desde2, int hasta2)
{
int a = desde1; // pocisionadores
int b = desde2;
// arreglo para las matriculas ordenadas
int[] Mezclado = new int[hasta1 - desde1 + hasta2 - desde2 + 2];
for (int i = 0; i < Mezclado.Length; i++) // ciclo for para las comparaciones
{
if (b != Mezclado.Length) // copia el valor al arreglo si se cumplen las condiciones
{
if (a > hasta1 && b <= hasta2)
{
Mezclado[i] = x[b];
b++; // incrementa posicion
}
if (b > hasta2 && a <= hasta1)
{
Mezclado[i] = x[a];
a++; // incrementa posicion
}
if (a <= hasta1 && b <= hasta2)
{
if (x[b] <= x[a])
{
Mezclado[i] = x[b];
b++; // incrementa posicion
}
else
{
Mezclado[i] = x[a];
a++; // incrementa posicion
}
}
}
else
{
if (a <= hasta1)
{
Mezclado[i] = x[a];
a++; // incrementa posicion
}
}
}
return Mezclado; // regresa el arreglo ordenado
}
}
}

////Nombre: Garcia Garcia Alexandra Isabella


////Numero de Control: 20210936
////Materia: Estructura de Datos
//Grupo: R
////Serie: Sc3r

También podría gustarte