import java.util.List; import java.util.ArrayList; public class QuickSortMachine extends DivideAndConquerSortingMachine { @Override protected boolean isSimple(List problem) { return (problem.size() <= 1); } @Override protected List simplySolve(List problem) { return problem; } @Override protected List> decompose(List problem) { List subProblem1 = new ArrayList(); List subProblem2 = new ArrayList(); int pivot = problem.get(0); for (int i = 1; i < problem.size(); i++) { Integer nextValue = problem.get(i); if (nextValue <= pivot) { subProblem1.add(nextValue); } else { subProblem2.add(nextValue); } } List> result = new ArrayList>(); List middle = new ArrayList(); middle.add(pivot); result.add(subProblem1); result.add(middle); result.add(subProblem2); return result; } @Override protected List combine(List problem, List> subSolutions) { List solution = new ArrayList(); for (List subSolution : subSolutions) { for (Integer value : subSolution) { solution.add(value); } } return solution; } }