mergeSort

JavaScript

counter =0;

const merge = (a, b) => {
  counter +=1;
	if (!a.length) return b;
  if (!b.length) return a;
  
  if (a[0] < b[0]) {
  	return [a[0], ...merge(a.slice(1, a.length), b)];
  }
  else {
  	return [b[0], ...merge(a, b.slice(1, b.length))];
  }
}

const mergeSort = (a) => {
	if (a.length === 1) return a;
  
  const middle = Math.floor(a.length/2);
  const left = a.slice(0, middle);
  const right = a.slice(middle, a.length);
  
  return merge(mergeSort(left), mergeSort(right));
}

console.log(mergeSort([38, 27, 43, 3, 9, 82, 10]));
console.log(counter);