El algoritmo de ordenamiento por selección requiere de operaciones para ordenar una lista de x números. Siguiendo lo siguientes parámetros:
- Buscas el elemento más pequeño de la lista.
- Lo intercambias con el elemento ubicado en la primera posición de la lista.
- Buscas el segundo elemento más pequeño de la lista.
- Lo intercambias con el elemento que ocupa la segunda posición en la lista.
- Repites este proceso hasta que hayas ordenado toda la lista. NOTA: Al final de los pasos encontraras el código completo. 😉
PASO 1. Creación de lista a ordenar
// Definir lista con valores a ordenar.
int [] selection = new int[]{ 2, 4, 23, 8, 5, 9, 4, 6, 1 };
PASO 2. Definición de variables para almacenar procesos
// DEFINICION DE VARIABLES QUE SE USARAN PARA ALMACENAR PROCESOS
int aux, minimo;
PASO 3. Imprimir lista
// LISTA ORIGINAL
Console.WriteLine("LISTA ORIGINAL");
for (int i = 0; i < selection.Length; i++)
{
Console.Write(selection[i]+" ");
}
PASO 4. Proceso para ordenamiento por selección
for (int i = 0; i < selection.Length; i++)
{
min = i; // min se iguala a la posición de i.
// BUSCA EL VALOR MAS PEQUEÑO
for (int j = i+1; j < selection.Length; j++) // i+1 -> SUMA MAS UNO A LA POSICION DEL VECTOR
{
// VALIDAR EL VALOR MENOR
if (selection[j] < selection[min]) // VALIDA LOS VALORES EN LAS POSICIONES DEL VECTOR
{
min = j; // min SE IGUALA A LA POSICION DE j
}
}
// INTERCAMBIANDO VALORES
aux = selection[i];
selection[i] = selection[min];
selection[min] = aux;
}
PASO 5. Impresión de datos ordenados
// IMPRESION DE DATOS ORDENADOS
Console.WriteLine("\nDATOS ORDENADOS");
for (int i = 0; i < selection.Length; i++)
{
Console.Write(selection[i]+" ");
}
EJECUCION:
Código
using System.Diagnostics;
Stopwatch timeMeasure = new Stopwatch();
int[] secuencial = new int[] { 2, 4, 23, 8, 5, 9, 4, 6, 1 };
int aux, min;
Console.WriteLine("LISTA ORIGINAL");
for (int i = 0; i < secuencial.Length; i++)
{
Console.Write(secuencial[i]+" ");
}
timeMeasure.Start();
for (int i = 0; i < secuencial.Length; i++)
{
min = i;
// INTERCAMBIAR VALORES MEDIANTE POSICIONES
for (int j = i+1; j < secuencial.Length; j++)
{
// VALIDAR DATOS MENORES
if (secuencial[j] < secuencial[min])
{
min = j;
}
}
// INTERCAMBIANDO VALORES
aux = secuencial[i];
secuencial[i] = secuencial[min];
secuencial[min] = aux;
}
// IMPRESION DE DATOS ORDENADOS
Console.WriteLine("\nDATOS ORDENADOS");
for (int i = 0; i < secuencial.Length; i++)
{
Console.Write(secuencial[i]+" ");
}
timeMeasure.Stop();
Console.WriteLine($"\nTiempo de ejecucion: {timeMeasure.Elapsed.TotalMilliseconds} ms");
Top comments (0)