private void doSort(List<T> list, int left, int right) {
        boolean isCompleted = right <= left;
        if ( isCompleted ) {
            return;
        }

        int pivot = partition(list, left, right);
        doSort(list, left, pivot - 1);
        doSort(list, pivot + 1, right);
    }