import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; /** * Date: Apr 9, 2010 * Time: 8:38:24 AM */ public class CallableQuicksortAlternateOrder { public static List quickSort(List a) throws Exception { if (a.isEmpty()) { return new ArrayList(); } List left = new ArrayList(); List mid = new ArrayList(); List right = new ArrayList(); for (Integer i : a) { if (i < a.get(0)) { left.add(i); // Use element 0 as pivot } else if (i > a.get(0)) { right.add(i); } else { mid.add(i); } } final List left_f = left, right_f = right; Callable> left_c = new Callable>() { public List call() throws Exception { return quickSort(left_f); } }; Callable> right_c = new Callable>() { public List call() throws Exception { return quickSort(right_f); } }; List right_s = right_c.call(); List left_s = left_c.call(); left_s.addAll(mid); left_s.addAll(right_s); return left_s; } }