private void quicksort(int low, int high) {
		int i = low, j = high;
		// Get the pivot element from the middle of the list
		T pivot = (T) values.get(low + (high-low)/2);
		
		// Divide into two lists
		while (i <= j) {
			// If the current value from the left list is larger then the pivot
			// element then get the next element from the left list
			while (((Comparable<T>) values.get(i)).compareTo(pivot) > 0) {
				i++;
			}
			// If the current value from the right list is smaller then the pivot
			// element then get the next element from the right list
			while (((Comparable<T>) values.get(j)).compareTo(pivot) < 0) {
				j--;
			}

			// If we have found a values in the left list which is smaller then
			// the pivot element and if we have found a value in the right list
			// which is larger then the pivot element then we exchange the
			// values.
			// As we are done we can increase i and j
			if (i <= j) {
				exchange(i, j);
				i++;
				j--;
			}
		}
		// Recursion
		if (low < j)
			quicksort(low, j);
		if (i < high)
			quicksort(i, high);
	}