private static void _quickSort(int[] a, int start, int end) {
        if (start >= end) {
            return;
        }

        /* start partition */
        int pivot = (int) (a[start] + a[end]) / 2;
        int i = start, j = end;
        while (i <= j) {
            while (a[i] < pivot) {
                i++;
            }
            while (a[j] > pivot) {
                j--;
            }
            if (i <= j) {
                int tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
                i++; j--;
            }
        }

        _quickSort(a, start, i - 1); // !!!
        _quickSort(a, i, end);
    }