package plp.sort; public class QuickSort implements Sort { private static SortableData data; public static final QuickSort QUICK_SORT = new QuickSort(); private QuickSort() { } private static void quickSort(int left, int right) { if (left < right) { int i = left; int j = right + 1; while (i < j) { while (data.compare(++i, left) < 0 && i < right) ; while (data.compare(--j, left) > 0) ; if (i < j) { data.swap(i, j); } } data.swap(left, j); quickSort(left, j - 1); quickSort(j + 1, right); } } public void doSort(SortableData data) { this.data = data; quickSort(0, data.length() - 1); } public static void main(String [] args) { SortableData data = new SortableArray(args); SortableDataTracer tracer = new SortableDataTracer(data); tracer.addObserver(new WinTracer(tracer, data)); tracer.addObserver(new AsciiTracer()); SortableDataStatistic statData = new SortableDataStatistic(tracer); QUICK_SORT.doSort(statData); for (int i = 0; i < args.length; ++i) { System.out.println(args[i]); } System.out.println(statData.getAccessStat() + " access, " + statData.getCompareStat() + " compare, " + statData.getSwapStat() + " swap"); System.exit(0); } }