public static int ParticionDes(List <Estudiante> arr, int left, int rigth, string parametro)
            {
                Estudiante pivote  = arr[rigth];
                int        Ppivote = rigth;
                Estudiante temp;

                int i = left;

                for (int j = left; j < rigth; j++)
                {
                    Ordenamientos.comparaciones++;
                    if (Recursos.Ordenador <Estudiante>(arr, parametro, j, Ppivote) > 0)
                    {
                        temp   = arr[j];
                        arr[j] = arr[i];
                        arr[i] = temp;
                        i++;
                        Ordenamientos.asignaciones++;
                    }
                }
                arr[rigth] = arr[i];
                arr[i]     = pivote;

                return(i);
            }
        static public List <Estudiante> Insercion(List <Estudiante> arr, string parametro, bool EsAscendente)
        {
            if (EsAscendente)
            {
                Estudiante temp;

                for (int i = 0; i < arr.Count() - 1; i++)
                {
                    for (int j = i + 1; j > 0; j--)
                    {
                        comparaciones++;
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, j - 1, j) > 0)
                        {
                            temp       = arr[j - 1];
                            arr[j - 1] = arr[j];
                            arr[j]     = temp;
                            asignaciones++;
                        }
                    }
                }
                return(arr);
            }
            else
            {
                Estudiante temp;

                for (int i = 0; i < arr.Count() - 1; i++)
                {
                    for (int j = i + 1; j > 0; j--)
                    {
                        comparaciones++;
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, j - 1, j) < 0)
                        {
                            temp       = arr[j - 1];
                            arr[j - 1] = arr[j];
                            arr[j]     = temp;
                            asignaciones++;
                        }
                    }
                }
                return(arr);
            }
        }
        static public List <Estudiante> Burbuja(List <Estudiante> arr, string parametro, bool EsAscendente)
        {
            Estudiante temp;

            if (EsAscendente)
            {
                for (int write = 0; write < arr.Count; write++)
                {
                    for (int sort = 0; sort < arr.Count - 1; sort++)
                    {
                        comparaciones++;
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, sort, sort + 1) > 0)
                        {
                            temp          = arr[sort + 1];
                            arr[sort + 1] = arr[sort];
                            arr[sort]     = temp;
                            asignaciones++;
                        }
                    }
                }
                return(arr);
            }
            else
            {
                for (int write = 0; write < arr.Count; write++)
                {
                    for (int sort = 0; sort < arr.Count - 1; sort++)
                    {
                        comparaciones++;
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, sort, sort + 1) < 0)
                        {
                            temp          = arr[sort + 1];
                            arr[sort + 1] = arr[sort];
                            arr[sort]     = temp;
                            asignaciones++;
                        }
                    }
                }
                return(arr);
            }
        }
        static public List <Estudiante> Shell(List <Estudiante> arr, string parametro, bool EsAscendente)
        {
            if (EsAscendente)
            {
                Estudiante temp;

                int salto = 0;
                int sw    = 0;
                int e     = 0;

                salto = arr.Count() / 2;
                while (salto > 0)
                {
                    sw = 1;
                    while (sw != 0)
                    {
                        sw = 0;
                        e  = 1;
                        while (e <= (arr.Count() - salto))
                        {
                            comparaciones++;
                            if (Recursos.Ordenador <Estudiante>(arr, parametro, e - 1, (e - 1) + salto) > 0)
                            {
                                temp = arr[(e - 1) + salto];
                                arr[(e - 1) + salto] = arr[e - 1];
                                arr[(e - 1)]         = temp;
                                sw = 1;
                                asignaciones++;
                            }
                            e++;
                        }
                    }
                    salto = salto / 2;
                }
                return(arr);
            }
            else
            {
                Estudiante temp;

                int salto = 0;
                int sw    = 0;
                int e     = 0;

                salto = arr.Count() / 2;
                while (salto > 0)
                {
                    sw = 1;
                    while (sw != 0)
                    {
                        sw = 0;
                        e  = 1;
                        while (e <= (arr.Count() - salto))
                        {
                            comparaciones++;
                            if (Recursos.Ordenador <Estudiante>(arr, parametro, e - 1, (e - 1) + salto) < 0)
                            {
                                temp = arr[(e - 1) + salto];
                                arr[(e - 1) + salto] = arr[e - 1];
                                arr[(e - 1)]         = temp;
                                sw = 1;
                                asignaciones++;
                            }
                            e++;
                        }
                    }
                    salto = salto / 2;
                }
                return(arr);
            }
        }
        static public List <Estudiante> Seleccion(List <Estudiante> arr, string parametro, bool EsAscendente)
        {
            int        posicionValorMinimo;
            Estudiante temp;

            if (EsAscendente)
            {
                for (int i = 0; i < arr.Count() - 1; i++)
                {
                    //Suponemos que el valor mínimo está en esta posición.
                    posicionValorMinimo = i;

                    //Iteramos entre el resto de los elementos.
                    for (int j = i + 1; j < arr.Count(); j++)
                    {
                        comparaciones++;
                        //Si este elemento es menor que el que habíamos tomado.
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, j, posicionValorMinimo) < 0)
                        {
                            //Indicamos la posición del nuevo elemento más chico.
                            posicionValorMinimo = j;
                        }
                    }
                    //Si encontramos un número menor que el tomado al principio.
                    if (i != posicionValorMinimo)
                    {
                        //Intercambiamos sus lugares.
                        temp   = arr[i];
                        arr[i] = arr[posicionValorMinimo];
                        arr[posicionValorMinimo] = temp;
                        asignaciones++;
                    }
                }
                return(arr);
            }
            else
            {
                for (int i = 0; i < arr.Count() - 1; i++)
                {
                    //Suponemos que el valor mínimo está en esta posición.
                    posicionValorMinimo = i;

                    //Iteramos entre el resto de los elementos.
                    for (int j = i + 1; j < arr.Count(); j++)
                    {
                        comparaciones++;
                        //Si este elemento es mayor que el que habíamos tomado.
                        if (Recursos.Ordenador <Estudiante>(arr, parametro, j, posicionValorMinimo) < 0)
                        {
                            //Indicamos la posición del nuevo elemento más chico.
                            posicionValorMinimo = j;
                        }
                    }
                    //Si encontramos un número menor que el tomado al principio.
                    if (i != posicionValorMinimo)
                    {
                        //Intercambiamos sus lugares.
                        temp   = arr[i];
                        arr[i] = arr[posicionValorMinimo];
                        arr[posicionValorMinimo] = temp;
                        asignaciones++;
                    }
                }
                return(arr);
            }
        }