IntroSorter

abstract class IntroSorter : Sorter

Sorter implementation based on a variant of the quicksort algorithm called introsort: when the recursion level exceeds the log of the length of the array to sort, it falls back to heapsort. This prevents quicksort from running into its worst-case quadratic runtime. Selects the pivot using Tukey's ninther median-of-medians, and partitions using Bentley-McIlroy 3-way partitioning. Small ranges are sorted with insertion sort.

This algorithm is NOT stable. It's fast on most data shapes, especially with low cardinality. If the data to sort is known to be strictly ascending or descending, prefer [ ].

Constructors

Link copied to clipboard
constructor()

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
fun binarySort(from: Int, to: Int, i: Int = from + 1)

A binary sort implementation. This performs O(n*log(n)) comparisons and O(n^2) swaps. It is typically used by more sophisticated implementations as a fall-back when the number of items to sort has become less than {@value #BINARY_SORT_THRESHOLD}. This algorithm is stable.

Link copied to clipboard
fun checkRange(from: Int, to: Int)
Link copied to clipboard
open fun doRotate(lo: Int, mid: Int, hi: Int)
Link copied to clipboard
fun heapify(from: Int, to: Int)
Link copied to clipboard
fun heapSort(from: Int, to: Int)

Use heap sort to sort items between from inclusive and to exclusive. This runs in O(n*log(n)) and is used as a fall-back by IntroSorter. This algorithm is NOT stable.

Link copied to clipboard
fun insertionSort(from: Int, to: Int)

Sorts between from (inclusive) and to (exclusive) with insertion sort. Runs in O(n^2). It is typically used by more sophisticated implementations as a fall-back when the number of items to sort becomes less than {@value #INSERTION_SORT_THRESHOLD}. This algorithm is stable.

Link copied to clipboard
fun lower(from: Int, to: Int, val: Int): Int
Link copied to clipboard
fun lower2(from: Int, to: Int, val: Int): Int
Link copied to clipboard
fun mergeInPlace(from: Int, mid: Int, to: Int)
Link copied to clipboard
fun reverse(from: Int, to: Int)
Link copied to clipboard
fun rotate(lo: Int, mid: Int, hi: Int)
Link copied to clipboard
fun siftDown(i: Int, from: Int, to: Int)
Link copied to clipboard
open override fun sort(from: Int, to: Int)

Sort the slice which starts at from (inclusive) and ends at to (exclusive).

fun sort(from: Int, to: Int, maxDepth: Int)

Sorts between from (inclusive) and to (exclusive) with intro sort.

Link copied to clipboard
fun upper(from: Int, to: Int, val: Int): Int
Link copied to clipboard
fun upper2(from: Int, to: Int, val: Int): Int