package sort;

public class QuickSort {
    private static Comparable[] data;

    private static void swap(int i, int j) {
        Comparable tmp = data[i];
        data[i] = data[j];
        data[j] = tmp;
    }

    private static void quickSort(int left, int right) {
        if (left < right) {
            int i = left;
            int j = right + 1;
            while (i < j) {
                while (data[++i].compareTo(data[left]) < 0 && i < right)
                    ;
                while (data[--j].compareTo(data[left]) > 0)
                    ;
                if (i < j) {
                    swap(i, j);
                }
            }
            swap(left, j);
            quickSort(left, j - 1);
            quickSort(j + 1, right);
        }
    }

    public static void doSort(Comparable[] data) {
        QuickSort.data = data;
        quickSort(0, data.length - 1);
    }
}