Shivers Sort

Adaptive run-stack merge strategy related to practical natural-merge hybrids.

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

How it works

Adaptive run-stack merge strategy related to practical natural-merge hybrids.

Implementation

function shiversSort(arr, stats) {
  const n = arr.length;
  if (n < 2) return;
  const temp = new Array(n).fill(0);
  for (let width = 1; width < n; width *= 2) {
    for (let lo = 0; lo < n; lo += 2 * width) {
      const mid = Math.min(lo + width, n);
      const hi = Math.min(lo + 2 * width, n);
      if (mid >= hi) continue;
      let i = lo;
      let j = mid;
      let k = lo;
      while (i < mid && j < hi) {
        if (arr[i] <= arr[j]) {
          temp[k] = arr[i];
          i++;
        } else {
          temp[k] = arr[j];
          j++;
        }
        k++;
      }
      while (i < mid) {
        temp[k] = arr[i];
        i++;
        k++;
      }
      while (j < hi) {
        temp[k] = arr[j];
        j++;
        k++;
      }
      for (let p = lo; p < hi; p++) {
        arr[p] = temp[p];
      }
    }
  }
}