private int partition(int[] nums, int start, int end){
        int mid = start + (end - start)/2;
        swap(nums, mid, end);
        int pivot = nums[end];
        int low = start;
        int high = end - 1;
        while(low <= high){ // --> be careful, it need to has '='!
            if(nums[low] >= pivot){
                swap(nums, low, high--);
            }else{
                low++;
            }
        }
        swap(nums, low, end);
        return low;
    }