External Merge Sort

Chunk-and-merge strategy modeling large-data sorting workflows beyond RAM.

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

How it works

Chunk-and-merge strategy modeling large-data sorting workflows beyond RAM.

Implementation

function externalMergeSort(arr, stats) {
  const n = arr.length;
  const runSize = 32;
  for (let start = 0; start < n; start += runSize) {
    const end = Math.min(start + runSize, n);
    for (let i = start + 1; i < end; i++) {
      const key = arr[i];
      let j = i - 1;
      while (j >= start && arr[j] > key) {
        arr[j + 1] = arr[j];
        j--;
      }
      arr[j + 1] = key;
    }
  }
  const buffer = new Array(n).fill(0);
  for (let width = runSize; width < n; width *= 2) {
    for (let left = 0; left < n; left += 2 * width) {
      const mid = Math.min(left + width, n);
      const right = Math.min(left + 2 * width, n);
      let i = left;
      let j = mid;
      let k = left;
      while (i < mid && j < right) {
        if (arr[i] <= arr[j]) {
          buffer[k] = arr[i];
          i++;
        } else {
          buffer[k] = arr[j];
          j++;
        }
        k++;
      }
      while (i < mid) {
        buffer[k] = arr[i];
        i++;
        k++;
      }
      while (j < right) {
        buffer[k] = arr[j];
        j++;
        k++;
      }
      for (let t = left; t < right; t++) arr[t] = buffer[t];
    }
  }
}