/// <summary> /// Metodo de ordenamiento QuickSort /// </summary> /// <param name="_iColumna">Columna en la que se basa para ordenar las filas</param> /// <param name="_bTipo">Tipo de ordenamiento</param> /// <param name="_bConcurrencia">Indica si se ordena de forma concurrente o no</param> /// <returns>Retorna el tiempo de ejecucion de la funcion</returns> public static string quickSort(int _iColumna, bool _bTipo, bool _bConcurrencia) { clsArchivo insArchivo = new clsArchivo(); List<string> aoLineas = insArchivo.cargarArchivo(); int iSegmento = (aoLineas.Count / 3) + 1; StringBuilder sbTexto = new StringBuilder(); var vTiempo = Stopwatch.StartNew(); /* ***************************************************************************************** */ if (_bConcurrencia) { StringBuilder sbTextoTmp1 = new StringBuilder(); StringBuilder sbTextoTmp2 = new StringBuilder(); var vLista = aoLineas.Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Index / iSegmento) .Select(x => x.Select(v => v.Value).ToList()) .ToList(); aoLineas = null; Parallel.Invoke( () => { sbTexto = quickSort(vLista.ElementAt(0), _iColumna, _bTipo, _bConcurrencia); }, () => { sbTextoTmp1 = quickSort(vLista.ElementAt(1), _iColumna, _bTipo, _bConcurrencia); }, () => { sbTextoTmp2 = quickSort(vLista.ElementAt(2), _iColumna, _bTipo, _bConcurrencia); } ); vLista = null; sbTexto.Append(sbTextoTmp1.Append(sbTextoTmp2.ToString()).ToString()); } else /* ------------------------------------------------------------------------------------ */ { sbTexto = quickSort(aoLineas, _iColumna, _bTipo, _bConcurrencia); aoLineas = null; } /* ***************************************************************************************** */ vTiempo.Stop(); insArchivo.guardarArchivo(sbTexto); return Convert.ToString(vTiempo.Elapsed); }
/// <summary> /// Funcion principal evalua el tiempo que dura la ejecucion /// </summary> /// <param name="_iColumna">Columna que se va a ordenar</param> /// <param name="_bTipo">Tipo de ordenamiento, ascendente o descendente</param> /// <param name="_bConcurrencia">Indica si se ejecuta de manera concurrente o no</param> /// <returns>retorna el tiempo de ejecucion</returns> public static string mergeSort(int _iColumna, bool _bTipo, bool _bConcurrencia) { clsArchivo insArchivo = new clsArchivo(); List<string> aoLineas = insArchivo.cargarArchivo(); int iSegmento = (aoLineas.Count / 3) + 1; StringBuilder sbTexto = new StringBuilder(); var vTiempo = Stopwatch.StartNew(); sbTexto = mergeSort(aoLineas, _iColumna, _bTipo, _bConcurrencia); aoLineas = null; vTiempo.Stop(); insArchivo.guardarArchivo(sbTexto); return Convert.ToString(vTiempo.Elapsed); }