@@ -0,0 +1,1360 @@
+package me.alivecode.algs4;%0A%0Aimport edu.princeton.cs.algs4.StdIn;%0A%0Apublic class Quick %7B%0A%0A    private Quick() %7B%7D%0A%0A    private static int partition(Comparable%5B%5D a, int lo, int hi) %7B%0A        int i = lo;%0A        int j = hi + 1;%0A        Comparable v = a%5Blo%5D;%0A        %0A        while(true) %7B%0A            // find item no lo to swap%0A            while(SortUtil.less(a%5B++i%5D, v)) %7B %0A                if (i %3E= hi) break;%0A            %7D%0A            // find item on hi to swap%0A            while(SortUtil.less(v, a%5B--j%5D)) %7B%0A                if (j %3C= lo) break;  // randundant since a%5Blo%5D acts as sentinel. BUT WHY?%0A            %7D%0A            %0A            if (i %3E= j) break; // check if pointers cross.%0A            SortUtil.exch(a, i, j);%0A        %7D%0A        SortUtil.exch(a, lo, j);%0A%0A        return j;%0A    %7D%0A%0A    private static void sort(Comparable%5B%5D a, int lo, int hi) %7B%0A        if (hi %3C= lo) return;%0A        int j = partition(a, lo, hi);%0A        sort(a, lo, j-1);%0A        sort(a, j+1, hi);%0A        assert SortUtil.isSorted(a, lo, hi);%0A    %7D%0A%0A    public static void sort(Comparable%5B%5D a) %7B%0A        assert (a != null && a.length %3E 0);%0A        StdRandom.shuffle(a);%0A        sort(a, 0, a.length-1);%0A        assert SortUtil.isSorted(a);%0A    %7D%0A%0A    public static void main(String%5B%5D args) %7B%0A        String%5B%5D a = StdIn.readAllStrings();%0A        sort(a);%0A        SortUtil.show(a);%0A    %7D%0A%7D %0A

Add quick sort.