/// <summary> /// Divide el problema de ordenación MergeSort en 2 problemas de ordenación MergeSort /// </summary> /// <param name="p">Problema</param> /// <returns>2 Problemas</returns> public override Problema[] Divide(Problema p) { MSProblema <T> m = (MSProblema <T>)p; int medio = (m.Ultimo + m.Primero) / 2; MSProblema <T>[] subp = new MSProblema <T> [2]; subp[0] = new MSProblema <T>(m.Array, m.Primero, medio); subp[1] = new MSProblema <T>(m.Array, medio + 1, m.Ultimo); return(subp); }
/// <summary> /// Resulución del Caso base del problema de ordenación MergeSort /// </summary> /// <param name="p">Problema</param> /// <returns>Solucion</returns> public override Solucion resuelveCasoBase(Problema p) { MSProblema <T> m = (MSProblema <T>)p; return(new MSSolucion <T>(m.Array, m.Primero, m.Ultimo)); }
/// <summary> /// Caso base del problema de ordenación MergeSort /// </summary> /// <param name="p">Problema</param> /// <returns></returns> public override bool esCasoBase(Problema p) { MSProblema <T> m = (MSProblema <T>)p; return(m.Ultimo == m.Primero); }