code: public static <T> T quickSelect(List<? extends T> data, Comparator<? super T> comparator, int rank) {
      quickSelect(data, comparator, 0, data.size(), rank);
      return data.get(rank);
    }
docs: QuickSelect is essentially quicksort, except that we only "sort" that half
  of the array that we are interested in.
  
  Note: the array is <b>modified</b> by this.
  
  @param <T> object type
  @param data Data to process
  @param comparator Comparator to use
  @param rank Rank position that we are interested in (integer!)
  @return Value at the given rank