BlockQuicksort

Quicksort variant using block partitioning to reduce branch mispredictions.

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

How it works

Quicksort variant using block partitioning to reduce branch mispredictions.

Implementation

function blockQuickSort(arr, stats) {
  const n = arr.length;
  if (n < 2) return;
  const stackLo = new Array(n + 1).fill(0);
  const stackHi = new Array(n + 1).fill(0);
  let top = 0;
  stackLo[top] = 0;
  stackHi[top] = n - 1;
  top++;
  while (top > 0) {
    top--;
    let lo = stackLo[top];
    let hi = stackHi[top];
    while (lo < hi) {
      const pivot = arr[hi];
      let store = lo;
      for (let i = lo; i < hi; i++) {
        if (arr[i] <= pivot) {
          const t = arr[store];
          arr[store] = arr[i];
          arr[i] = t;
          store++;
        }
      }
      const t = arr[store];
      arr[store] = arr[hi];
      arr[hi] = t;
      if (store - lo > hi - store) {
        if (lo < store - 1) {
          stackLo[top] = lo;
          stackHi[top] = store - 1;
          top++;
        }
        lo = store + 1;
      } else {
        if (store + 1 < hi) {
          stackLo[top] = store + 1;
          stackHi[top] = hi;
          top++;
        }
        hi = store - 1;
      }
    }
  }
}