Programa C# Merge

Se muestra un ejemplo del algoritmo (código) meerge en consola en c# con datos INT, y datos STRING.

Definición:
El algoritmo Merge divide el arreglo original en dos arreglos y los coloca en arreglos separados. Cada arreglo es recursivamente ordenado y finalmente se unen los arreglos en un arreglo ordenado. Como cualquiera de los algoritmos de ordenamiento recursivo el algoritmo Merge tiene complejidad de O(n log n). Fue desarrollado por John Von Neumann.

El proceso del merge es fusionar mitades de arreglos ordenados dentro de un arreglo. Sin embargo, estas mitades de arreglos tienen que ser ordenadas primero, por lo que se requiere de fusinar mitades de arreglos ya ordenados de estas mitades. Este proceso de partición de arreglos en dos mitades termina cuando el arreglo tiene por lo menos dos elementos.

Ejemplo del programa de Merge con datos tipo INT

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

namespace ConsoleApplication1
{
class Program
{
bool up;
int p, h, m, n = 25, k, l, i, j, q, r, t, con;
int[] a = new int[50];

public void Generar()
{
Random X = new Random();
for (int i = 0; i <= n; i++)
a[i] = X.Next(1, 200);
}

public void Desplegar()
{
con = 0;
for (int j = 0; j < n; j++)
{
if (con < 4)
{
Console.Write("{0}:{1}\t", j + 1, a[j]);
con++;
}
else
{
Console.Write("{0}:{1}\t\r\n", j + 1, a[j]);
con = 0;
}
}
}

public void MERGE()
{
up = true;
p = 1;
do
{
h = 1;
m = n;
if (up == true)
{
i = 0;
j = n-1;
k = n;
l = 2 * n-1;
}
else
{
k = 0;
l = n-1;
i = n;
j = 2 * n-1;
}
do
{
if (m >= p)
q = p;
else
q = m;
m = m - q;
if (m >= p)
r = p;
else
r = m;
m = m - r;
while (q != 0 && r != 0)
{
if (a[i] < a[j])
{
a[k] = a[i];
k = k + h;
i = i + 1;
q = q - 1;
}
else
{
a[k] = a[j];
k = k + h;
j = j - 1;
r = r - 1;
}
}
while (r > 0)
{
a[k] = a[j];
k = k + h;
j = j - 1;
r = r - 1;
}
while (q > 0)
{
a[k] = a[i];
k = k + h;
i = i + 1;
q = q - 1;
}
h = h*-1;
t = k;
k = l;
l = t;
}
while (m != 0);
up = !up;
p = 2 * p;
}
while (p < n);
if (up == false)
{
for (i = 0; i < n; i++)
a[i] = a[i + n];
}

con = 0;
for (int u = 0; u < n; u++)
{
if (con < 4)
{
Console.Write("{0}:{1}\t", u + 1, a[u]);
con++;
}
else
{
Console.Write("{0}:{1}\t\r\n", u + 1, a[u]);
con = 0;
}
}
}

static void Main(string[] args)
{
Program x = new Program();
int y = 0;
do
{
Console.Clear();
Console.WriteLine("Menu MERGE");
Console.WriteLine("1.-Generar");
Console.WriteLine("2.-Ordenar");
Console.WriteLine("3-Salir");

Console.WriteLine("Opcion a realizar");
y = System.Int16.Parse(Console.ReadLine());
switch (y)
{
case 1:
Console.Clear();
Console.WriteLine("Numeros sin ordenar");
x.Generar();
x.Desplegar();
Console.ReadLine();
Console.Clear();
break;

case 2:
Console.Clear();
Console.WriteLine("Sin ordenar");
x.Desplegar();
Console.WriteLine("\r\nOrdenado");
x.MERGE();
Console.ReadLine();
break;

case 3:
Console.Clear();
Console.WriteLine("Enter para salir");
Console.ReadLine();
break;

default:
Console.WriteLine("introduce opcion correcta");
y = 0;
Console.ReadLine();
break;

}
} while (y < 3);
}
}
}

Post Relacionados: