MergeSort without concat

by dpnminh

HTML

<div>
<button onclick="mergeSortPerform()">
Sort now
</button>
</div>

JavaScript

function MergeSort(A, start, end){
  if (start >= end) return;
  var middle = Math.floor((start + end) / 2);
  MergeSort(A, start, middle);
  MergeSort(A, middle + 1, end);
  Merge(A, start, middle, end);
}

function Merge(A, start, middle, end){
  var leftArr = [], rightArr = [], leftIndex = 0, rightIndex = 0, i = start;
  
  leftArr = A.slice(start, middle + 1);
  rightArr = A.slice(middle + 1, end + 1);
  
  while (leftIndex <leftArr.length && rightIndex < rightArr.length && i < end + 1){
  	if (leftArr[leftIndex] < rightArr[rightIndex]){
    	A[i] = leftArr[leftIndex];
      leftIndex++;
    }
    else{
    	A[i] = rightArr[rightIndex];
      rightIndex++;
    }
    
    i++;
  }
  
  while (leftIndex <leftArr.length){
  	A[i] = leftArr[leftIndex];
    leftIndex++;
    i++;
  }
  
  while (rightIndex < rightArr.length){
  	A[i] = rightArr[rightIndex];
    rightArr++;
    i++;
  }
}

function mergeSortPerform(){
	var arr = Array.from({length: 10000}, () => Math.floor(Math.random() * 40));
  console.log('before - ', arr);
  
  MergeSort(arr, 0, arr.length - 1);
  console.log('after - ', arr);
}