Metodos de Ordenación C#

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

METODOS DE ORDENAMIENTO EN C#

 Program

ppAlgoritmosOrdenacion appAlgoritmosOrdenacion = new AppAlgoritmosOrdenacion();


appAlgoritmosOrdenacion.Iniciar();//metodo iniciar del obj appAlgoritmosOrdenacion

LAS CLASES GENERADAS

 EntradaDatos

namespace AppEtapa4
{
public class EntradaDatos
{
private decimal[] numeros;
private readonly int _cantidad;

public EntradaDatos(int cantidad) {


_cantidad = cantidad;
numeros = new decimal[cantidad];
}

public decimal[] ObtenerNumeros()


{
for (int i = 0; i < _cantidad; i++)
{
Console.WriteLine($"Enter number in position: {i + 1}");
decimal numero = 0;
do
{
numero = CapturarNumero();
}
while (EsRepetido(i, numero));
numeros[i] = numero;
}

return numeros;
}
private bool ValidarNumero(string numero)
{
bool esValido = true;
//cuando el numero sea nulo
if (numero == null)
{
Console.WriteLine("Invalid number format");
return false;
}

//compruebo que sea un numero


decimal number;
esValido = decimal.TryParse(numero, out number);
//si no es numero
if (!esValido)
{
Console.WriteLine("Invalid number format");
return false;
}
//cuando es valido
return esValido;
}

private decimal CapturarNumero()


{
string? strNumero = null;
do
{
Console.WriteLine("Enter Number:");
strNumero = Console.ReadLine();
}
while (!ValidarNumero(strNumero));

return decimal.Parse(strNumero);
}

private bool EsRepetido(int posicionActual, decimal numero)


{
for (int i = 0; i < posicionActual; i++)
{
if (numeros[i] == numero)
{
Console.WriteLine("The Number Is Repeat:");
return true;
}
}
return false;
}
}
}

 Bloque try-catch, archivo txt, la interfaz de usuario (Menú)

public class AppAlgoritmosOrdenacion


{
private decimal[] numeros;//variable privada llamada "numeros" de tipo decimal
public void Iniciar()
{

try //dentro de un bloque try si ocurre algún error, el programa salta al al bloque de código catch para darle
manejo al error

Console.WriteLine("Welcome to the Sorting Aplication");

//capturar 10 numeros decimales


EntradaDatos entradaDatos = new EntradaDatos(10); //crea una instancia de la clase "EntradaDatos"
numeros = entradaDatos.ObtenerNumeros();
bool exit = false;//variable booleana llamada exit con valor false
while (!exit) // bucle while que se ejecuta mientras la condición !exit sea verdadera
{
Mostrarmenu();//muestra el menú con los cuatros metodos de ordenamiento burbuja, shell, Insercion y
selección
int choise = int.Parse(Console.ReadLine());//captura la opción elegida por el usuario y se almacena en la
variable choice
switch (choise)//estructura de control desde donde se ejecuta el código según el metodo de ordenamiento
elegido por el usuario
{
case 1:
ImplementarAlgoritmoOrdenamiento(new Burbuja());
break;
case 2:
ImplementarAlgoritmoOrdenamiento(new Shell());
break;
case 3:
ImplementarAlgoritmoOrdenamiento(new Insecion());
break;
case 4:
ImplementarAlgoritmoOrdenamiento(new Seleccion());
break;
case 5:
exit = true;
break;
}
}

}
catch (Exception ex)//try - catch permite el manejo del error dentro del bloque de código
{
Console.WriteLine(ex.ToString());
}
}

private void ImplementarAlgoritmoOrdenamiento(IMetodoOrdenamiento metodoOrdenamiento)


{
metodoOrdenamiento.Ordenar(numeros);
MostrarOrdenamiento();
RegistrarArchivo();
}

private void Mostrarmenu()


{
Console.WriteLine("1. Bubble Sort ");
Console.WriteLine("2. Shell Sort");
Console.WriteLine("3. Selection Sort");
Console.WriteLine("4. InsertionSort");
Console.WriteLine("5. Exit ");
}

private void MostrarOrdenamiento()


{
foreach (var numero in numeros)
{
Console.Write($"{numero} ");
}
Console.WriteLine();
}

private void RegistrarArchivo() {


string fileName = @"C:\Temp\Ordenamiento.txt"; //a variable "fileName" almacena la ruta del archivo
Ordenamiento.txt ubicado en la carpeta C:\Temp del sistema.
try {
using (StreamWriter writer = new StreamWriter(fileName))
{

foreach (var numero in numeros)


{
writer.Write($"{numero} ");
}

Console.WriteLine("Sorted numbers have been successfully saved to the file.");

}
catch (Exception exp) { Console.Write(exp.Message); }

}
}

 Clase llamada IMetodoOrdenamientos

namespace AppEtapa4.Algoritmos
{
public interface IMetodoOrdenamiento //la interfaz proporciona a las clases de ordenamiento heredar el metodo
Ordenar
{
void Ordenar(decimal[] arr);
}
}

 Método Burbuja

{
//la clase Bubuja hereda de la superclase IMetodoOrdenamiento el metodo Ordenar
public class Burbuja : IMetodoOrdenamiento//El metodo de la burbuja funciona comparando pares de elementos y
si estan en orden incorrecto intercambian las posiciones
{
public void Ordenar(decimal[] arr)
{
int cantidad = arr.Length;
for (int i = 0; i < cantidad - 1; i++)
{
for (int j = 0; j < cantidad - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
decimal temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}

}
}
}

 Método Selección

namespace AppEtapa4.Algoritmos
{
//la clase Seleccion hereda de IMetodoOrdenamiento el metodo Ordenar
public class Seleccion : IMetodoOrdenamiento //utiliza iteraciones repetidas para encontrar el elemento más
pequeño para intercambiarlos con el primer elementos de la lista.
{
public void Ordenar(decimal[] arr) //metodo publico llamado ordenar con arreglo de decimales como parametro
{
int cantidad = arr.Length; // variable cantidad asignando valor de longitud del arreglo
for (int i = 0; i < cantidad; i++) // bucle for donde inicia con 0
{
int minimo = i;
for (int j = i + 1; j < cantidad; j++)//segundo bucle
{
if (arr[j] < arr[minimo])//se verifica si la posición j es menor que la posición minimo del arreglo. Si es
verdadero se ejecuta el bloque de código dentro del condicional "if".
{
minimo = j; //el valor de minimo se actualiza con j que es el elemento que se considera minimo
decimal temp = arr[minimo];//variable tem
arr[minimo] = arr[i];//se asigna valor al elemento i del arreglo el cual será reemplazado por elemento
en la posición i
arr[i] = temp; // se asigna valor a la variable tem en la posición i el intercambio de valores en las
posiciones minimo e i coloca el numero más pequeño en la posición correcta del array
}
}
}
}
}
}

 Método Shell

{
//la clase Shell hereda de IMetodoOrdenamiento el metodo Ordenar
public class Shell : IMetodoOrdenamiento //se caracteriza por dividir la lista original en gran cantidad de sublistas
más pequeñas
{
public void Ordenar(decimal[] arr)
{
int cantidad = arr.Length;

int gap = cantidad / 2;


while (gap > 0)
{

for (int i = gap; i < cantidad; i++)


{
decimal temp = arr[i];
int j = i;

while (j >= gap && arr[j - gap] > temp)


{

arr[j] = arr[j - gap];


j -= gap;

arr[j] = temp;

gap /= 2;

}
}
}

 Método Inserción

{
//la clase Insercion hereda de IMetodoOrdenamiento el metodo Ordenar
public class Insecion : IMetodoOrdenamiento //Insercion funciona insertando cada numero en su posición correcta
previa comparación con los demás numeros
{
public void Ordenar(decimal[] arr)
{
int cantidad = arr.Length;
// Iterar sobre todos los elementos del arreglo
for (int i = 1; i < cantidad; i++)
{
decimal key = arr[i];
int j = i - 1;

// Mover los elementos mayores que key a una posición adelante de su posición actual
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j--;
}
}

}
}
}

También podría gustarte