code: @Override
    public <E> List<E> sort(final List<E> elements) {
      if (elements.size() > 1) {
        int size = elements.size();
        int count = ((size / 2) + (size % 2));
  
        List<E> leftElements = sort(elements.subList(0, count));
        List<E> rightElements = sort(elements.subList(count, size));
  
        return merge(leftElements, rightElements);
      }
  
      return elements;
    }
docs: Uses the Merge Sort algorithm to sort a List of elements as defined by the Comparator, or as determined
  by the elements in the collection if the elements are Comparable.
  
  @param <E> the type of elements in the List.
  @param elements the List of elements to sort.
  @return the collection of elements sorted.
  @see java.util.List