protected int partition(int attIndex, int l, int r) {

        double pivot = instance((l + r) / 2).value(attIndex);

        while (l < r) {
            while ((instance(l).value(attIndex) < pivot) && (l < r)) {
                l++;
            }
            while ((instance(r).value(attIndex) > pivot) && (l < r)) {
                r--;
            }
            if (l < r) {
                swap(l, r);
                l++;
                r--;
            }
        }
        if ((l == r) && (instance(r).value(attIndex) > pivot)) {
            r--;
        }

        return r;
    }