public final class LongTimSort
extends java.lang.Object
A stable, adaptive, iterative mergesort that requires far fewer than
 n lg(n) comparisons when running on partially sorted arrays, while
 offering performance comparable to a traditional mergesort when run
 on random arrays.  Like all proper mergesorts, this sort is stable and
 runs O(n log n) time (worst case).  In the worst case, this sort requires
 temporary storage space for n/2 object references; in the best case,
 it requires only a small constant amount of space.
 This implementation was adapted from Tim Peters's list sort for
 Python, which is described in detail here:
   http://svn.python.org/projects/python/trunk/Objects/listsort.txt
 Tim's C code may be found here:
   http://svn.python.org/projects/python/trunk/Objects/listobject.c
 The underlying techniques are described in this paper (and may have
 even earlier origins):
  "Optimistic Sorting and Information Theoretic Complexity"
  Peter McIlroy
  SODA (Fourth Annual ACM-SIAM Symposium on Discrete Algorithms),
  pp 467-474, Austin, Texas, 25-27 January 1993.
 While the API to this class consists solely of static methods, it is
 (privately) instantiable; a TimSort instance holds the state of an ongoing
 sort, assuming the input array is large enough to warrant the full-blown
 TimSort. Small arrays are sorted in place, using a binary insertion sort.