예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }