Class ShellSorter<T>

java.lang.Object
com.irurueta.sorting.Sorter<T>
com.irurueta.sorting.ShellSorter<T>
Type Parameters:
T - Type of instances being sorted.

This class is based on algorithm found at Numerical Recipes. 3rd Edition. Cambridge Press. Chapter 8. p. 422 Knuth. D.E. 1997, Sorting and Searching, 3rd ed., vol. 3 of The Art of Computer Programming (Reading, MA: Addison-Wesley) Sedgewick, R. 1998. Algorithms in C, 3rd ed. (Reading, MA: Addison- Wesley), Chapter 11.


public class ShellSorter<T> extends Sorter<T>
Sorts instances of type T in provided arrays using Shell method.
  • Field Details

    • INCREMENT_FACTOR

      private static final int INCREMENT_FACTOR
      Constant defining increment factor to be used internally.
      See Also:
    • MIN_INCREMENT

      private static final int MIN_INCREMENT
      Constant defining minimum increment before stopping the sorting process.
      See Also:
  • Constructor Details

    • ShellSorter

      public ShellSorter()
  • Method Details

    • sort

      public void sort(T[] array, int fromIndex, int toIndex, Comparator<T> comparator)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered.
      Specified by:
      sort in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      comparator - Determines whether an element is greater or lower than another one.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sortWithIndices

      public int[] sortWithIndices(T[] array, int fromIndex, int toIndex, Comparator<T> comparator)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered. An array containing the original indices where elements were located is returned so that other arrays or collections can be kept in the same order.
      Specified by:
      sortWithIndices in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      comparator - Determines whether an element is greater or lower than another one.
      Returns:
      Array containing original location of elements that have been sorted. Only elements between fromIndex (inclusive) and toIndex (exclusive) are modified, the remaining ones are kept in natural order.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • getMethod

      public SortingMethod getMethod()
      Returns sorting method of this class.
      Specified by:
      getMethod in class Sorter<T>
      Returns:
      Sorting method.
    • sort

      public void sort(double[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered.
      Specified by:
      sort in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sortWithIndices

      public int[] sortWithIndices(double[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered. An array containing the original indices where elements were located is returned so that other arrays or collections can be kept in the same order.
      Specified by:
      sortWithIndices in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Returns:
      Array containing original location of elements that have been sorted. Only elements between fromIndex (inclusive) and toIndex (exclusive) are modified, the remaining ones are kept in natural order.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sort

      public void sort(float[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered.
      Specified by:
      sort in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sortWithIndices

      public int[] sortWithIndices(float[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered. An array containing the original indices where elements were located is returned so that other arrays or collections can be kept in the same order.
      Specified by:
      sortWithIndices in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Returns:
      Array containing original location of elements that have been sorted. Only elements between fromIndex (inclusive) and toIndex (exclusive) are modified, the remaining ones are kept in natural order.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sort

      public void sort(int[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered.
      Specified by:
      sort in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sortWithIndices

      public int[] sortWithIndices(int[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered. An array containing the original indices where elements were located is returned so that other arrays or collections can be kept in the same order.
      Specified by:
      sortWithIndices in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Returns:
      Array containing original location of elements that have been sorted. Only elements between fromIndex (inclusive) and toIndex (exclusive) are modified, the remaining ones are kept in natural order.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sort

      public void sort(long[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered.
      Specified by:
      sort in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.
    • sortWithIndices

      public int[] sortWithIndices(long[] array, int fromIndex, int toIndex)
      Sorts provided array in ascending order so that array[i - 1] < array[i] for any valid i. This method modifies provided array so that after execution of this method array elements are ordered. An array containing the original indices where elements were located is returned so that other arrays or collections can be kept in the same order.
      Specified by:
      sortWithIndices in class Sorter<T>
      Parameters:
      array - Array to be sorted. After execution of this method elements in array between fromIndex (inclusive) and toIndex (exclusive) are modified so that they are on ascending order.
      fromIndex - Index were sorting starts (inclusive).
      toIndex - Index were sorting stops (exclusive).
      Returns:
      Array containing original location of elements that have been sorted. Only elements between fromIndex (inclusive) and toIndex (exclusive) are modified, the remaining ones are kept in natural order.
      Throws:
      IllegalArgumentException - If fromIndex > toIndex.
      ArrayIndexOutOfBoundsException - if fromIndex < 0 or toIndex > array.length.