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>()); } }