import java.util.List; import java.util.ArrayList; public class DivideAndConquerSortingMachine { public static List solve( List problem, T algorithm) { List> subProblems; if (algorithm.isSimple(problem)) { return algorithm.simplySolve(problem); } else { subProblems = algorithm.decompose(problem); } List> subSolutions = new ArrayList>(); for (int i = 0; i < subProblems.size(); i++) { subSolutions.add(i, solve(subProblems.get(i), algorithm)); } return algorithm.combine(problem, subSolutions); } }