// defaults to median when idx isn't given static A ithSmallest(L l, int idx default l(l)/2) { int n = l(l); if (n <= 80) ret get(sorted(l), idx); int cols = (n+4)/5; new L medians; for (int i = 0; i < cols; i++) medians.add(ithSmallest(subList(l, i*5, 5))); // median of medians A mom = ithSmallest(medians); L setA = filter(l, a -> lessThan(a, mom)); L setB = filter(l, a -> greaterThan(a, mom)); int nA = l(setA); if (idx < nA) ret ithSmallest(setA, idx); if (idx == nA) ret mom; ret ithSmallest(setB, idx-nA-1); }