/** * QuickSort * */public class QuickSort { public static void sort(Comparable[] a, int lo, int hi) { if(lo >= hi) { return; } int mid = partition(a, lo, hi); sort(a, lo, mid-1); sort(a, mid+1, hi); } private static int partition(Comparable[] a, int lo, int hi) { Comparable v = a[lo]; int i = lo; int j = hi+1; while(true) { while(less(a[++i], v)) { if(i == hi) break; } while(less(v, a[--j])) { if(j == lo) { break; } } if(i >= j) { break; } exch(a, i, j); } exch(a, lo, j); return j; } private static boolean less(Comparable v, Comparable w) { return v.compareTo(w) < 0; } private static void exch(Comparable[] a, int i, int j) { Comparable tmp = a[i]; a[i] = a[j]; a[j] = tmp; } public static void show(Comparable[] a) { for(int i=0; i