Tim Sort

Hybrid of merge sort and insertion sort. Finds natural runs, extends them, and merges with a sophisticated merge strategy. Used by Python and Java.

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

Hybrid of merge sort and insertion sort. Finds natural runs, extends them, and merges with a sophisticated merge strategy. Used by Python and Java.

Implementation

function timSort(arr) {
  const RUN = 32;
  for (let i = 0; i < arr.length; i += RUN)
    insertionSort(arr, i, Math.min(i+RUN-1, arr.length-1));
  for (let sz = RUN; sz < arr.length; sz *= 2)
    for (let l = 0; l < arr.length; l += 2*sz) {
      let m = Math.min(l+sz-1, arr.length-1);
      let r = Math.min(l+2*sz-1, arr.length-1);
      if (m < r) merge(arr, l, m, r);
    }
}