* @param high: last index of the object list.
	 * @return: index of the pivot element.
	 */
	int partition(int low, int high){
		int i = low, j = high + 1, mid = (high - low) / 2;

		// Find the pivot object's index
		int pivotIndex = findPivot(low, mid, high);
		
		// Swap element at 'low' with pivot
		T pivot = this.lst.get(pivotIndex);
		this.lst.set(pivotIndex, this.lst.get(low));
		this.lst.set(low, pivot);
		
		// Partition the list by pivot
		while (true){
			// Move the 'i'th pointer until an element greater than pivot
			while ((++i < j) && (this.lst.get(i).compareTo(pivot) <= 0));
			
			// Move the 'j'th pointer until an element less than pivot
			while ((--j >= i) && (this.lst.get(j).compareTo(pivot) >= 0));
			
			// Pointers crossed over, break out of loop.
			if (j < i)
				break;
			
			// Swap 'i'th and 'j'th elements
			T jCopy = this.lst.get(j);
			this.lst.set(j, this.lst.get(i));
			this.lst.set(i, jCopy);
		}
		
		//Swap pivot (@ 'low') with 'j', it's correct position
		this.lst.set(low, this.lst.get(j));
		this.lst.set(j, pivot);

		return j;
	}