Pattern-Defeating Quicksort

Modern hybrid.

Best O(n) Avg O(n log n) Worst O(n log n) Space O(log n) Stable No In-place Yes Comparison-based

How it works

Modern hybrid.

Implementation

function pdqSort(arr, lo = 0, hi = arr.length - 1, depth = 0) {
  while (hi - lo + 1 > 16) {
    if (depth > 2 * Math.log2(hi - lo + 1)) {
      heapSort(arr, lo, hi); return;
    }
    let pivot = ninther(arr, lo, hi);
    let [lt, gt] = partition(arr, lo, hi, pivot);
    pdqSort(arr, lo, lt - 1, depth + 1);
    lo = gt + 1; depth++;
  }
  insertionSort(arr, lo, hi);
}