Package org.apache.lucene.util

# Class TimSorter

java.lang.Object
org.apache.lucene.util.Sorter
org.apache.lucene.util.TimSorter

public abstract class TimSorter extends Sorter
`Sorter` implementation based on the TimSort algorithm. It sorts small arrays with a binary sort.

This algorithm is stable. It's especially good at sorting partially-sorted arrays.

NOTE:There are a few differences with the original implementation:

- The extra amount of memory to perform merges is configurable. This allows small merges to be very fast while large merges will be performed in-place (slightly slower). You can make sure that the fast merge routine will always be used by having `maxTempSlots` equal to half of the length of the slice of data to sort.
- Only the fast merge routine can gallop (the one that doesn't run in-place) and it only gallops on the longest slice.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `TimSorter(int maxTempSlots)`
  Create a new `TimSorter`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected abstract int`
  `compareSaved(int i, int j)`
  Compare element `i` from the temporary storage with element `j` from the slice to sort, similarly to `Sorter.compare(int, int)`.
  `protected abstract void`
  `copy(int src, int dest)`
  Copy data from slot `src` to slot `dest`.
  `protected abstract void`
  `restore(int i, int j)`
  Restore element `j` from the temporary storage into slot `i`.
  `protected abstract void`
  `save(int i, int len)`
  Save all elements between slots `i` and `i+len` into the temporary storage.
  `void`
  `sort(int from, int to)`
  Sort the slice which starts at `from` (inclusive) and ends at `to` (exclusive).

  ### Methods inherited from class org.apache.lucene.util.Sorter

  `compare, comparePivot, setPivot, swap`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### TimSorter

    protected TimSorter(int maxTempSlots)
    Create a new `TimSorter`.
    Parameters:
      `maxTempSlots` - the maximum amount of extra memory to run merges

- ## Method Details

  - ### sort

    public void sort(int from, int to)
    Description copied from class: `Sorter`
    Sort the slice which starts at `from` (inclusive) and ends at `to` (exclusive).
    Specified by:
      `sort` in class `Sorter`

  - ### copy

    protected abstract void copy(int src, int dest)
    Copy data from slot `src` to slot `dest`.

  - ### save

    protected abstract void save(int i, int len)
    Save all elements between slots `i` and `i+len` into the temporary storage.

  - ### restore

    protected abstract void restore(int i, int j)
    Restore element `j` from the temporary storage into slot `i`.

  - ### compareSaved

    protected abstract int compareSaved(int i, int j)
    Compare element `i` from the temporary storage with element `j` from the slice to sort, similarly to `Sorter.compare(int, int)`.