private int partition(int start, int end) {
		SortingUtils.swap(array, start, new Random().nextInt(end-start+1)+start);
		int i = start;
		int j = end;
		int pivotV = array[i];
		
		while(i<j) {
			while(i<j && array[j]>=pivotV) {j--;}
			if(i<j) {
				array[i++] = array[j];
			}
			while(i<j && array[i]<pivotV) {i++;}
			if(i<j) {
				array[j--] = array[i];
			}
		}
		array[i] = pivotV;
		return i;
	}