package plp.sort; import java.util.Comparator; public class QuickSort implements Sort { private static SortableData data; public static final QuickSort QUICKSORT = 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) { SortableDataStatistic statData = new SortableDataStatistic(new SortableDataTracer(new SortableArray(args, Reverse.reverse()))); QUICKSORT.doSort(statData); for (int i = 0; i < args.length; ++i) { System.out.print(args[i] + " "); } System.out.println(); System.out.println(statData.getAccessStat() + " access, " + statData.getCompareStat() + " compare, " + statData.getSwapStat() + " swap"); } }