Exemplo n.º 1
0
        static public List <Estudiante> Mezcla(Estudiante[] arregloEstudiantes, int left, int right, string parametro, bool EsAscendente)
        {
            if (EsAscendente)
            {
                if (left < right)
                {
                    int middle = (left + right) / 2;

                    Mezcla(arregloEstudiantes, left, middle, parametro, EsAscendente);
                    Mezcla(arregloEstudiantes, middle + 1, right, parametro, EsAscendente);

                    Estudiante[] leftArray  = new Estudiante[middle - left + 1];
                    Estudiante[] rightArray = new Estudiante[right - middle];

                    Array.Copy(arregloEstudiantes, left, leftArray, 0, middle - left + 1);
                    Array.Copy(arregloEstudiantes, middle + 1, rightArray, 0, right - middle);

                    int i = 0;
                    int j = 0;

                    for (int k = left; k < right + 1; k++)
                    {
                        comparaciones++;
                        if (i == leftArray.Length)
                        {
                            arregloEstudiantes[k] = rightArray[j];
                            j++;
                        }
                        else if (j == rightArray.Length)
                        {
                            arregloEstudiantes[k] = leftArray[i];
                            i++;
                        }
                        else if (Recursos.OrdenadorVector <Estudiante>(leftArray, i, rightArray, j, parametro) < 0)
                        {
                            arregloEstudiantes[k] = leftArray[i];
                            i++;
                            asignaciones++;
                        }
                        else
                        {
                            arregloEstudiantes[k] = rightArray[j];
                            j++;
                        }
                    }
                }
                return(arregloEstudiantes.ToList <Estudiante>());
            }
            else
            {
                if (left < right)
                {
                    int middle = (left + right) / 2;

                    Mezcla(arregloEstudiantes, left, middle, parametro, EsAscendente);
                    Mezcla(arregloEstudiantes, middle + 1, right, parametro, EsAscendente);

                    Estudiante[] leftArray  = new Estudiante[middle - left + 1];
                    Estudiante[] rightArray = new Estudiante[right - middle];

                    Array.Copy(arregloEstudiantes, left, leftArray, 0, middle - left + 1);
                    Array.Copy(arregloEstudiantes, middle + 1, rightArray, 0, right - middle);

                    int i = 0;
                    int j = 0;

                    for (int k = left; k < right + 1; k++)
                    {
                        if (i == leftArray.Length)
                        {
                            arregloEstudiantes[k] = rightArray[j];
                            j++;
                        }
                        else if (j == rightArray.Length)
                        {
                            arregloEstudiantes[k] = leftArray[i];
                            i++;
                        }
                        else if (Recursos.OrdenadorVector <Estudiante>(leftArray, i, rightArray, j, parametro) > 0)
                        {
                            arregloEstudiantes[k] = leftArray[i];
                            i++;
                        }
                        else
                        {
                            arregloEstudiantes[k] = rightArray[j];
                            j++;
                        }
                    }
                }
                return(arregloEstudiantes.ToList <Estudiante>());
            }
        }