Algoritmo de Ordenación por Burbuja y Manejo de Ficheros en C#
Ordenación de Vectores con Método Burbuja y Manejo de Ficheros en C#
El siguiente programa en C# demuestra el procesamiento de datos numéricos mediante la lectura de un archivo de texto, la aplicación del algoritmo de ordenación de la burbuja y el almacenamiento de los resultados en un nuevo fichero.
Código Fuente Completo de la Clase Practica16
public class Practica16
{
static string PintarVector(int[] vector)
{
string vectorText = "[ ";
for (int i = 0; i < vector.Length; i++)
{
vectorText += String.Format("{0,4} ", vector[i]);
}
vectorText += " ]";
return vectorText;
}
static int ContarLineasFichero(string path)
{
StreamReader lectorLineas = new StreamReader(path);
string linea;
int numeroLineas = 0;
while ((linea = lectorLineas.ReadLine()) != null)
{
numeroLineas++;
}
lectorLineas.Close();
return numeroLineas;
}
static int[] LeerEnterosDeFichero(string path)
{
int[] numeros = new int[ContarLineasFichero(path)];
StreamReader lectorNums = new StreamReader(path);
string linea;
int indice = 0;
while ((linea = lectorNums.ReadLine()) != null)
{
numeros[indice] = Convert.ToInt32(linea);
indice++;
}
lectorNums.Close();
return numeros;
}
static void OrdenarVectorMetodoBurbuja(ref int[] vector, out int pasadas, out int intercambios)
{
intercambios = 0;
pasadas = 0;
while (true)
{
pasadas++;
bool intercambio = false;
for (int j = 0; j < vector.Length; j++)
{
if (j != vector.Length - 1 && vector[j] > vector[j + 1])
{
int aux = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = aux;
intercambio = true;
intercambios++;
}
}
if (!intercambio) break;
}
}
public static void Main()
{
string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string carpeta = desktop + @"\MisDatos\";
string pathEntrada = carpeta + "datos.in.txt";
string pathSalida = carpeta + "datos.out.txt";
int[] listanumeros = LeerEnterosDeFichero(pathEntrada);
string vectorSinOrdenar = PintarVector(listanumeros);
Console.WriteLine("Vector a ordenar: {0} ", vectorSinOrdenar);
int intercambios, pasadas;
OrdenarVectorMetodoBurbuja(ref listanumeros, out pasadas, out intercambios);
Console.WriteLine("Vector ordenado : {0} ", PintarVector(listanumeros));
Console.WriteLine("Número de pasadas realizadas={0} e intercambios={1}", pasadas, intercambios);
StreamWriter escritor = new StreamWriter(pathSalida);
escritor.WriteLine("Vector sin ordenar: {0}", vectorSinOrdenar);
escritor.WriteLine("Vector ordenado : {0}", PintarVector(listanumeros));
escritor.WriteLine("Número de pasadas realizadas={0} e intercambios={1}", pasadas, intercambios);
escritor.Close();
Console.WriteLine("Fin del programa.");
Console.ReadLine();
}
}Componentes Principales del Algoritmo
- PintarVector: Da formato visual al arreglo de enteros entre corchetes con espaciado uniforme para su presentación por consola o archivo.
- ContarLineasFichero: Emplea
StreamReaderpara calcular la cantidad de elementos disponibles y dimensionar adecuadamente el vector. - LeerEnterosDeFichero: Carga y convierte cada línea de texto del archivo de entrada a un valor de tipo
int. - OrdenarVectorMetodoBurbuja: Implementa el ordenamiento por burbuja optimizado mediante una bandera booleana de control de intercambios, computando las pasadas e intercambios totales a través de parámetros
out. - Main: Gestiona las rutas en el escritorio (
Environment.SpecialFolder.Desktop), coordina la entrada/salida y almacena los resultados medianteStreamWriter.